windows程式設計師開發linux程式的頭一個月
- 2021 年 3 月 13 日
- 筆記
- C++, linux, Visual Studio 2019, 跨平台
-
開發環境選擇
vim,vscode,qt,visual studio都可以做linux c++開發,但是作為windows程式設計師,最熟悉的還是visual stuio,加上visual studio 2019 支援cmake及linu開發,所以最終選擇了visual studio 2019 + cmake作為開發環境.同時使用虛擬機中的ubuntu作為編譯機. -
學習cmake基本用法
學習設置包含路徑;
學習設置庫搜索路徑;
學習設置動態庫靜態庫的導入; -
選擇boost作為基礎庫
有許多常用演算法的實現,省下不少造輪子的時間.
可以將很多作業系統相關細節透明化,實現跨平台開發. -
學習一個linux發行版基本用法
選擇了最容易入手的ubuntu,有介面操作,也可以使用命令行,還有進程監視器. -
選擇一個文件傳輸工具
FinalShell,不經可以通過ui傳輸文件,還可以通過ui的方式操作文件. -
編碼
演算法實現上到是沒什麼區別,但是一些細節還是需要注意的:- 路徑格式,windows是正斜杠(‘/’)反斜杠(”)都ok,linux必須是正斜杠(‘/’).經常使用boost::filesystem庫會減少很多麻煩.
- windows下wchar_t是2個位元組,linux下是三個位元組,所以程式碼不能寫的太死,記憶體分配是經常使用sizeof就可以了.
- 本機字元windows下是ansi,linux是utf-8,即平時使用的api參數是char*時,windows必須傳ansi字元串,而linux必須傳入utf-8字元串.
- 盡量不要使用UINT DWORD這些visual c++的數據類型,舊程式碼改造留下的如果修改很麻煩,就只能用個頭文件typedefine一下這些類型了.
- linux不支援程式碼導入庫,即不能使用 #pragma comment(lib,”xxx”)這種方法通過程式碼自動導入庫,只能通過cmake程式碼導入.
- windows的dll搜索路徑默認包含當前路徑,linux並沒有,不會搜索當前路徑,可以通過修改LD_LIBRARY_PATH環境變數來添加索索路徑.
- gcc編譯器很多時候比msvc的編譯器更加嚴格,相同的程式碼,windows下編譯通過,linux下編譯反而報錯.
- linux下一切皆文件,包括socket,進程等,這點和windows的句柄有點不一樣.如果需要在進程間傳遞句柄,則需要使用linux特有的與套接字,這點在windows下反而更方便,一個windows api就可以實現跨進程句柄拷貝了.
- linux下網路使用epoll,windows使用iocp,不過有boost的asio,直接封裝好了.
-
現狀
一個多月過去了,現在程式已經可以跑在windows和linux上了,visual studio 2019幫了很大的忙,試想如果從vim開始寫linux,估計會把人逼瘋.而通過vs,一個月,基本上現在常規的開發,問題已經不大了,偶爾遇到問題,也基本可以解決.