VS2017開發Linux平臺上的程序
重裝系統後安裝VS2015時卡住了,於是試試看VS2017怎樣,聽說還支持調Linux。發現VS2017跟12/13/15又有了新的飛躍,竟然支持模塊化下載,對於我這種主要寫C++簡直是個福音,勾了Linux C++和MFC後,C盤+D盤也才6G,比起VS2015只額外勾MFC就有10G來說輕了這麽多!
VS2017只有在線安裝包,寢室裏下載不到10分鐘就搞定了,迫不及待地新建項目
哇擦,終於沒有了微軟地一堆.NET系列了!
然後現在就開始配置跨平臺Linux開發環境,按照官網教程
https://blogs.msdn.microsoft.com/vcblog/2016/03/30/visual-c-for-linux-development/
我的Linux是Ubuntu 16.04,微軟支持14.04和16.04,所以可以使用。首先為了支持遠程調試,Linux那邊需要安裝一些服務
sudo apt-get install openssh-server g++ gdb gdbserver
這裏我一開始發現Linux不能聯網,原來是之前在實驗室裏設置了靜態IP,回寢室後,由於這個靜態IP和寢室的路由器支持IP不是一個網段,導致需要重新修改IP跟主機一個網段。具體參見之前的博客 虛擬機Linux橋接模式下設置靜態IP
新建一個Linux控制臺項目,VS主頁會有教程,於是迫不及待地寫了份使用POSIX線程庫的代碼
#include <cstdio> #include<cstdlib> #include <string.h> #include <pthread.h> void* thread_func(void* arg) { printf("線程函數: %s\n", static_cast<char*>(arg)); return nullptr; } int main() { pthread_t tid; int errnum = pthread_create(&tid, nullptr, thread_func, const_cast<char*>("Hello Linux!")); if (errnum != 0) { fprintf(stderr, "pthread_create error: %s\n", strerror(errnum)); exit(1); } errnum = pthread_join(tid, nullptr); if (errnum != 0) { fprintf(stderr, "pthread_join error: %s\n", strerror(errnum)); exit(1); } return 0; }
使用POSIX線程時,編譯選項需要加上-pthread,於是在菜單:調試->HelloLinux屬性(這裏HelloLinux是項目名稱)中修改命令行參數
既然是遠程調試,那麽自然需要遠程連接了,寫好代碼後菜單:調試->生成解決方案(快捷鍵F7)後,會自動彈出連接框(端口號是22,即SSH連接,所以剛才才需要在Linux上安裝openssh-server)
在菜單:工具->選項->跨平臺中,也可以看到遠程連接地信息
編譯會出錯,提示找不到pthread_create和pthread_join,但是我加了-pthread編譯選項啊?原因是VS沒有自動把Linux的頭文件包含進來,因此需要手動把Linux系統的/usr/include、/usr/local/include目錄復制到VS的linux頭文件路徑下,我的VS安裝路徑把默認的C盤改成了D盤,於是目錄就是下面這個
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\Linux\include\usr
然後要添加該目錄到VS的頭文件目錄下
然後程序參數也要修改
之後就是F7組建、F5調試了,註意要在控制臺顯示結果必須打開Linux控制臺(菜單:調試-Linux控制臺)
結果如圖,程序運行成功了,但是中文字符亂碼,原因是VS2017默認編碼模式並不是UTF-8,這裏需要安裝插件
菜單:工具->擴展與更新->聯機,搜索UTF找到最頂上這個插件,下載
之後重啟VS,重新生成解決方案->開始調試,依然亂碼。原因是更改了UTF-8之後,原來代碼中的中文沒有自動轉換成UTF-8編碼,但是顯示的還是中文而非亂碼,所以需要把中文部分全部刪除然後再次鍵入,之後就成功了
鏘~鏘~除了遠程連接有點耗時間外,其余還是很滿意的,VS大法好!
VS2017開發Linux平臺上的程序