1. 程式人生 > >跨平臺C++伺服器程式開發 (1)瞭解跨平臺開發

跨平臺C++伺服器程式開發 (1)瞭解跨平臺開發

跨平臺伺服器程式的作用

所謂跨平臺,主要指Windows和Linux兩個主要平臺。如今絕大多數伺服器後端程式執行在Linux平臺,這是因為Linux具有免費、開源、遠端操控方便、易於大規模運維管理等優點,相比之下,Windows平臺更適用於個人使用者的辦公和娛樂,因此伺服器程式多數要在Linux平臺上執行。

但是在開發過程中,大部分開發者更習慣使用Windows平臺的Visual Studio(簡稱VS)整合開發環境,而不習慣Linux平臺的開發工具如vim、emacs、eclipse等,雖然說各有喜好,但總體來說還是VS更方便高效,有程式碼智慧提示、查詢引用、批量改名、視覺化除錯等優點。所以從開發效率角度考慮,Visual Studio是最好的開發工具。

所以理想情況下我們既希望使用Windows平臺的VS作為開發工具,又希望編寫的程式碼能夠在Linux平臺編譯執行,而滿足這兩個條件就需要我們開發跨平臺的程式,這就是跨平臺程式的作用。

跨平臺程式實現方法

要實現同一份程式碼在Windows和Linux平臺都編譯通過並不難,因為標準c/c++在設計時就是跨平臺的,可以寫一段最簡單的HelloWorld程式碼分別在VS和gcc環境下編譯,肯定能編譯通過。

但顯然不太可能在專案中只使用c/c++標準庫函式,我們還要使用系統api函式,比如建立執行緒函式,在Windows裡是_beginthreadex函式,在Linux裡是pthread_create

函式,所以在不同平臺編譯時需要加以區分,這裡可以通過預定義巨集實現。

通過VS建立專案時,會自動生成WIN32_WIN32兩個巨集。在編寫Linux平臺使用的makefile時,我們也可以手動新增一個巨集_LINUX用於指定是在Linux平臺下編譯。

下面為一個跨平臺建立執行緒程式碼段:

#ifdef WIN32
    HANDLE hThread = (HANDLE)_beginthreadex( ... );
#else
    int result = pthread_create( ... );
#endif

若定義了巨集WIN32(Windows平臺),使用_beginthreadex

函式,否則使用pthread_create函式,這裡指的是編譯期的處理。

當然我們也可以改用_LINUX巨集來做判斷,程式碼如下:

#ifndef _LINUX
    HANDLE hThread = (HANDLE)_beginthreadex( ... );
#else
    int result = pthread_create( ... );
#endif

若沒有定義_LINUX巨集,表明不是Linux平臺。通過巨集定義,區分編譯期需要編譯的程式碼,以實現跨平臺的效果。

開發環境

Windows平臺有Visual Studio整合開發環境,搭配svn版本管理工具,基本滿足開發需求。

Linux平臺用到的主要工具如下:

功能 名稱
文字編輯器 vim
原始碼版本管理 svn
除錯 gdb
編譯 g++
編譯指令碼 cmake
典型的開發流程:
  1. 在VS裡編輯程式碼,並在Windows平臺編譯除錯通過,通過svn上傳程式碼。
  2. 通過遠端工具連線Linux,在shell命令列裡使用svn更新程式碼,使用cmake編寫編譯指令碼,並執行程式碼編譯。
  3. 若在Linux下編譯報錯,找到錯誤原因後,使用vim修改程式碼,編譯成功後,通過svn上傳修改內容。
  4. 若需要在Linux環境下除錯,通過gdb關聯正在執行的程序,或者直接通過gdb啟動除錯程序,在命令列下進行除錯。

本文講解了跨平臺開發的背景、實現方法、開發環境,希望對大家有所幫助。