1. 前言
vs2017釋出算是一個重大革新,內部支援Linux程式開發,也是微軟擁抱開源的又一大動作。vs中Linux開發需要有一個可以執行Linux系統,並且需要安裝開發環境和除錯環境,真正的編譯執行時在Linux系統中執行的。編譯的時候,vs會自動將程式碼複製到目標機器的~/projects/[project-name]目錄下,除錯的時候說直白的就是gdb的遠端除錯,方便的地方只是將除錯過程整合進IDE呼叫。
2. WSL
WSL是不久前的windows10特性,目前還在Beta版本,是windows下的一個Ubuntu分支,對於vs2017的Linux開發能夠提供方便,無需在另行安裝虛擬機器,因為目前是測試版本,所以可能會出現一些bug。
開啟WSL功能,需要進入[程式和功能]模組,點選啟動或關閉Windows功能按鈕。
開啟功能後,其實Linux系統還沒有部署安裝,需要在命令列中執行bash
命令安裝。
或者:
1. Win + X,接著點選或按 A 進入powershell。
2. 安裝 WSL:lxrun /install
3. 解除安裝 WSL:lxrun /uninstall /full複製程式碼
3. 配置Linux
3.1 安裝配置
更新源和軟體
sudo apt-get update
sudo apt-get upgrade複製程式碼
重灌openssh
sudo apt-get remove openssh-server
sudo apt-get install openssh-server複製程式碼
開啟配置檔案
sudo vim /etc/ssh/sshd_config複製程式碼
設定選項
AllowUsers yourusername
PasswordAuthentication=yes複製程式碼
重啟sshd
sudo service ssh --full-restart複製程式碼
安裝開發套件
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install gdb
sudo apt-get install gdbserver複製程式碼
3.2 常見錯誤
1. 如果你安裝了虛擬機器、VPN之類的軟體,啟動的時候可能會導致sshd錯誤。
* Stopping OpenBSD Secure Shell server sshd [ OK ]
* Starting OpenBSD Secure Shell server sshd sshd: ../sysdeps/posix/getaddrinfo.c:2603: getaddrinfo: Assertion `IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32)' failed.
Aborted (core dumped)
[fail]複製程式碼
結果如下圖:
解決方法只需在sshd_config檔案新增一個ListenAddress 0.0.0.0配置項即可。
參考這個:sshd fail because getaddrinfo
2. 除了上面的錯誤,還可能會發生啟動正常,確沒法訪問的錯誤。
發生錯誤後,檢視windows下是22埠是否開啟:
C:\>netstat -a -q -n | findstr ":22"
TCP 0.0.0.0:22 0.0.0.0:0 BOUND複製程式碼
結果顯示繫結成功,卻沒有正常監聽。查詢各種解決方案,發現第三方軟體導致的,國內的可能是騰訊TGP遊戲平臺,解除安裝後重啟電腦。
參考這個:Unable to open any PORT in bash
然後重新開啟bash,啟動ssh(關閉bash相當於關閉linux)。在windows下檢視:
C:\>netstat -a -q -n | findstr ":22"
TCP 0.0.0.0:22 0.0.0.0:0 LISTENING複製程式碼
圓滿解決。使用ssh可以正常訪問WSL了。
4. 建立專案
開啟vs2017,新建控制檯程式。
首次建立工程,會有一個詳細的readme幫助文件。
點選執行按鈕,彈出Linux配置選項。
預設沒有任何輸出,需要開啟[除錯]->[Liunx控制檯視窗]檢視資訊。
簡單的程式目前應該沒有問題,至於複雜的或者介面程式還沒有測試過。並且WSL目前只支援64位系統,如果真的需要在vs2017中開發Liunx程式,WSL或許不是一個很好的選擇。