VS2017開發Linux平臺上的程序

重裝系統後安裝VS2015時卡住了,因而試試看VS2017怎樣,據說還支持調Linux。發現VS2017跟12/13/15又有了新的飛躍,居然支持模塊化下載,對於我這種主要寫C++簡直是個福音,勾了Linux C++和MFC後,C盤+D盤也才6G,比起VS2015只額外勾MFC就有10G來講輕了這麼多!html

VS2017只有在線安裝包,寢室裏下載不到10分鐘就搞定了,火燒眉毛地新建項目linux

哇擦,終於沒有了微軟地一堆.NET系列了!ssh

而後如今就開始配置跨平臺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橋接模式下設置靜態IPui

新建一個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是項目名稱)中修改命令行參數spa

 

既然是遠程調試,那麼天然須要遠程鏈接了,寫好代碼後菜單:調試->生成解決方案(快捷鍵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大法好!

相關文章
相關標籤/搜索