在Visual Studio上用C++ 寫Linux
如今我們正在開發一個新的外掛,一個能夠讓開發者在 Visual Studio (以下簡稱 VS ) 上建構能夠在 Linux 上執行 C++ 程式的套件。開發者可以藉由這個外掛將 C++ 程式移轉到 Linux 伺服器、PC 以及移動裝置上,也同時可以藉由這個外掛將這些機器連結至你的 VS 上。
VS 將會自動地複製一份並在遠端建構你的來源檔,再執行帶有除錯器的應用程式。我們的這項計劃也針對特殊的架構提供系統支援,包含 ARM 等。
下方文章將繼續介紹使用我們這套全新的 Linux 計劃。
目前我們僅支援在遠端的目標 Linux 機器提供建構服務。我們並沒有限制特定的 Linux 釋出版本,但我們仍舊在一些工具的表現上有些相依性的差異。需要特別注意的是,我們需要 openssh-server、g++、gdb 以及 gdbserver。用你最習慣的套件管理工具來安裝他們,例如在 Debian 型別的 Linux 就可以使用:
sudo apt-get install openssh-server g++ gdb gdbserver
安裝
下載 Visual C++ for Linux Development extension 或從 Visual Studio 上的外掛管理員來獲得。目前我們在 Visual Studio 上的 Android Tools 上已有相依支援。如果你已經安裝了 VS 的話,你可以藉由 Add Remove Programs 來新增這些功能,編輯 VS 然後在 Visual C++ 移動裝置開發下選擇他們。
要開始一個新的專案可以透過以下路徑:Templates > Visual C++ > Cross Platform > Linux。
目前我們有三個可以使用的模板:針對像 Raspberry Pi 等物聯網裝置設計的 Blink、最基本的應用程式樣板 Console Application 以及讓開發者自己選擇需要加入的來源檔以及從預設設定起的 Empty。
你的第一個 VS Linux 專案
我們從建構一個主控臺 app 開始。從模板新增完你的專案後,在 printf 敘述句的地方設下一個中斷點,然後敲擊 F5 或遠端 GDB 除錯器按鈕。根據預設值,這個主控臺 app 設定與 debug/x64 的環境相容。如果你的遠端連線標的是 x86 或 arm 架構,那你需要先改變上述設定。在我演示的這個範例我使用的是 x64 Ubuntu VM。
由於這是第一次連結到標的的 Linux 機器,所以會彈出一個連線資訊視窗,是由在建構專案時所觸發的。
我們同時支援密碼以及認證形式的驗證方式,包含使用複雜密碼的認證。在第一次成功連線後,我們會將你的連結資訊儲存以便在日後需要連線時快速存取。你可以從 Tools > Options > Cross Platform > Linux 的路徑來管理你已儲存的連結資訊,以及是的,密碼/複雜密碼是已加密形式儲存的。我們也同時計劃在未來的更新版本中,在連線時無需儲存連結資訊。
在連線的過程中,你的來源檔會被複制到遠端的 Linux 機器上,並觸發 gcc 並根據專案的屬性設定來建構原始碼。在專案建構完畢之後,你的程式將會在遠端的機器上執行,並停止在我們先前所設下的中斷點上。
Linux 專案屬性
我們可以藉由以下的專案屬性來理解,東西是怎麼被部署到遠端 Linux 機器上的。
在 remote settings 下,你可以看到 remote 根目錄是預設在 ~/projects/ ,且該路徑下的遠端專案目錄會與我們的專案名稱相符。從 Linux 機器上去看的話,我們可以在 ~/projects/ConsoleApplication1 下發現建構後的成品 main.cpp。
根據專案的 General setting,可以瞭解到我們針對 Output 以及 Intermediate 路徑是怎麼設定的。除此之外,你可以發現到這個專案是被設定成一個應用程式的 — 代表我們的專案執行檔 ConsoleApplication1.out 是在 bin/x64/Debug/ 路徑下。另外可以注意到的是,我們也同時支援靜態以及動態的設定格式。
Linux 物聯網專案
現在我們來研究物聯網裝置的部分 — 以 Raspberry Pi 為例。你可以使用任何型別的 Pi 來執行 Raspbian。在我們的 Blink 範例裡我們使用 wiringPi — 如果你沒有這個安裝選項你也可以選擇從 apt 或來源檔來安裝。在 Tools > Options 搜尋 Linux 來新增一個連結,然後點選 “add” 來新增一個連結到你的 Raspberry Pi。
從專案屬性設定的地方檢視 Build Events 下的 Remote Post-Build Events。
你可以藉由這個設定在遠端已建構好專案的 Linux 標的上執行指令。這個模板已先預設了針對 LED 輸出的 GPIO pin,所以我們不需要再以 root 的身份執行我們的執行檔。
現在將一個 LED 連線到 Raspberry Pi 上的 pin 17 位置(如下圖)。
開啟 main.cpp 檔,並在第一個 digitalWrite 後 delay call 的地方設下中斷點,然後敲擊 F5。你可以看到你的 LED 燈亮起,且執行程式會在你下中斷點的地方停住。將你的程式持續執行到下一個 digitalWrite call 之後便可以看到 LED 燈熄滅。
可以透過瀏覽我們的物聯網研發專頁,來追蹤所有我們目前針對這樣的系統所釋出的功能。
桌面應用程式
我們剛已在上述的文章中,介紹了無介面 (headless) 以及裝置型的 Linux 應用程式,那桌上型的呢?在這裡我們將介紹一點特別的:我們將在 Linux 桌面上執行一個 OpenGL 應用程式。首先要確定的是,你的 Linux 桌面已經設定為包含 OpenGL 的環境,下述是我們會需要用到的 apt 套件:libgles1-mesa、libgles1-mesa-dev、freeglut3 以及 freeglut3-dev。
接下來請先建立一個空的 Linux 專案,然後前往 Julien Guertault’s OpenGL 教學下載旋轉方塊的來源檔,將其解壓縮並將 main.c 加到你的專案下。要能夠執行 Intellisense,你需要將 OpenGL 的標頭 (headers) 新增到 VC++ Directories,你可以從 OpenGL Registry 裡下載他們。現在前往你的專案屬性設定,然後新增 export DISPLAY=:0.0 到 Pre-Launch command 下。
然後,在 Linker Input 下新增 “m;GL;GLU;glut” 到 Library Dependencies 欄位。
另外,確認你的遠端設定是對應到對的機器。
接下來按下 F5。
還有一些有趣值得下中斷點的地方,例如大約在 80 行左右的位置有可以調整方塊旋轉的設定(試著調整看看 alpha 值),或在 KeyboardFunc 裡可以檢查按下鍵盤時所輸入的值。
開始實做原生的 Linux 應用
我們期望您與我們對於這些新開放的可能擁有一樣的期待。
安裝 Visual C++ for Linux Development extension,嘗試看看並告知我們哪些是你可以成功執行,以及哪些是你遇到的阻礙或遭遇任何問題。如果你有興趣的領域是在物聯網的部分的話,可以前往關注我們的 IoT Development page 以獲取最新資訊。你可以藉由這個部落格,或展覽頁的額外分頁、VS 回饋頻道以及 Twitter 上的 @visualc、@robotdad 或我的帳號聯絡到我們。
相關文章
- 使用Visual Studio Code編寫和啟用ABAP程式碼 (上)
- Visual Studio - Now with Go support,你會用 Visual Studio來寫go嗎?Go
- Visual Studio 2005:在組織內部採用 Visual Studio ExpressExpress
- Visual Studio C++ Project 配置C++Project
- 在Visual Studio 中使用git——分支管理-上(八)Git
- 在Visual Studio 中使用git——檔案管理-上(四)Git
- 用Visual Studio將Objective-C編譯為C++Object編譯C++
- Use any C++ Compiler with Visual StudioC++Compile
- Visual C++ 讀寫 MySQLC++MySql
- 循序漸進:將 eMbedded Visual C++ 應用程式遷移到 Visual Studio 2005C++
- Visual Studio中的C,C++,C#C++C#
- visual studio原生支援C++的含義C++
- Visual Studio C++ 安裝以及使用教程C++
- 用Visual C++編寫電子郵件程式 (轉)C++
- 在Visual Studio 中使用git——給Visual Studio安裝 git外掛(二)Git
- Visual Studio推出改進的C/C++支援C++
- Visual Studio部署C++環境下OpenCV庫C++OpenCV
- 在Visual Studio中快速啟動除錯Web應用程式除錯Web
- 在 Ubuntu 中安裝 Visual Studio CodeUbuntu
- 在Visual Studio 中使用git——同步到遠端伺服器-上(十一)Git伺服器
- 在 Visual Studio 上更好開發 Python 的六大功能!Python
- visual studio連線linux編碼Linux
- 將編譯過的C++庫迅速部署在Visual Studio新專案中編譯C++
- 在Visual C++中使用fopen()函式來讀寫檔案 (轉)C++函式
- visual studio 2008 開發c++學習(一):參考網上材料C++
- 利用Visual Studio除錯WSL下的C++工程除錯C++
- 使用Visual Studio 2005 撰寫CUDA 程式
- 在 Visual Studio Code (VS Code) 中設定
- 用 Visual Studio 升級 .NET 專案
- Visual Studio Code (vscode) 配置C、C++環境/編寫執行C、C++(Windows)【真正的小白版】VSCodeC++Windows
- Visual Studio Code
- 在Visual Studio 中使用git——分支管理-下(九)Git
- 在Visual Studio Code配置GoLang開發環境Golang開發環境
- Visual Studio Code 試用體驗總結
- Visual Studio 實用擴充套件推薦套件
- 在Visual Basic 中使用C++ 類 (轉)C++
- Visual C++應用框架揭密 (轉)C++框架
- 呼叫Visual Studio的cl.exe編譯C/C++程式編譯C++