閱讀目錄
主要介紹將Windows程序遷移到Linux系統相關知識
簡介
Windows程序遷移到Linux系統可能需要修改很多代碼,
既需要了解Linux平台的開發知識,
也需要了解Windows平台代碼如何遷移到Linux平台,
下面分享一下我所掌握的相關開發經驗,
如果有不對的地方,請立即指出。
操作系統
Linux操作系統都是使用Linux內核,比較常見的Linux發行版有 CentOS、RedHat、Debain、openSUSE等。
主流linux發行版的概述+比較+推薦
編輯器
- Vim
- Emacs
- gedit
- Atom
- Visual Studio Code
- ...
編譯器
- GCC
- Clang
構建系統
- make
- CMake
- qmake
- automake
- ...
調試
- gdb
- lldb
- ...
IDE
- Eclipse
- CodeBlocks
- Clion
可執行程序、動態庫、靜態庫
| 類型 | Windows | Linux |
|---|---|---|
| 執行程序 | .exe | 具有執行權限的文件,可以無擴展名 |
| 動態庫 | .dll | .so |
| 靜態庫 | .lib | .a |
| 批處理 | .bat/.cmd | Shell腳本,一般為.sh |
服務
Windows服務是Windows下特有的一種服務模型,一個Windows服務程序不能直接運行在Linux上,需要對這個Windows服務進行一些修改才能運行到Linux上。
Windows服務簡介
Windows服務的運行需要一個Windows服務以及一個服務管理程序。
創建Windows服務
構建一個Windows服務可能有幾種方式,比較常見的有,直接使用Windows服務API,另外一種方式,使用VS的服務模板,生成一個服務程序,而這個程序使用atl框架,而這個ATL框架實際就是對Windows服務API的封裝。
通過VS創建一個Windows服務程序看一個參考創建Windows服務。
注冊Windows服務
創建了Windows服務后,在運行服務前,需要先向系統注冊一下。
通過VS生成的服務,注冊比較簡單,詳情可以參考注冊Windows服務。
管理Windows服務
可以通過Windows服務管理器services.msc,net命令、sc命令管理Windows服務,詳情可以參考命令行管理Windows服務
Linux守護進程簡介
Linux服務,又稱為守護進程,或則daemons,與Windows服務類似,也需要一個服務程序以及一個管理程序。
創建Linux守護進程
創建守護進程程序要比創建Windows服務程序簡單很多,詳情可以參考守護進程詳解及創建。
管理Linux守護進程
跨平台服務框架——Boost.Application
Boost.Application是一個開源的C++庫,主要用於構建跨平台的服務,包括Windows、Unix、Linux、MaxOS等。沒錯,這個庫可以用來做跨平台的服務。Boost.Application 使用開源協議 Boost Software License, Version 1.0。
使用Boost.Application可以很方便的編寫跨平台的服務代碼,具體請參考使用Boost.Application快速構建Windows服務
日期和時間
boost::posix_time
數據庫自己封裝了一個date_time
多線程
| Windows | Linux | 跨平台 |
|---|---|---|
| CreateThread | pthread庫 | std::thread |
| GetCurrentThreadId | pthread庫 | std::this_thread::get_id |
| Sleep | usleep | std::this_thread_sleep_for(std::chrono::second(1)) |
同步
| Windows | Linux | 跨平台 |
|---|---|---|
| CRITICAL_SECTION | pthread庫 | std::mutex |
| 遞歸鎖 | pthread庫 | std::recursive_mutex |
| 讀寫鎖 | pthread庫 | boost::shared_mutex |
| CreateMutex | pthread庫 | boost::interprocess::named_mutex |
| InterlockedCompareExchange | pthread庫 | std::atomic |
| CreateEvent(not named) | pthread庫 | std::condition_variable |
| CreateEvent(named) | System V signal | boost::interprocess::named_condition |
文件和目錄
boost::filesystem
IO
| Windows | Linux | 跨平台 |
|---|---|---|
| Create/Open/Read/WriteFile | create/open/read/write | 標准C(fopen)/標准C++(fstream/filebuf) |
IPC
| Windows | Linux | 跨平台 |
|---|---|---|
| CreateFileMapping/MapViewOfFile/FlushOfView | mmap | boost::interprocess庫 |
SEH
| Windows | Linux | 跨平台 |
|---|---|---|
__try/__except |
signal | 自定義跨平台宏 |
dump
| Windows | Linux | 跨平台 |
|---|---|---|
| MiniDump | - | - |
VisualGDB
VisualGDB是一個VS插件,通過此插件,可以實現VS編輯、編譯、調試Linux程序。
開發Linux程序
Using Visual Studio to develop Linux apps
支持CMake
Creating CMake Linux projects with Visual Studio
調試
10 Powerful Debugging Tricks with Visual Studio
附加調試
Attaching to remote Linux applications with VisualGDB
分析崩潰轉儲
Debugging Linux Core Dumps with VisualGDB
從Windows遷移到Linux
Porting a Windows App to Linux with Visual Studio
學習資料
- 鳥哥的Linux私房菜 基礎學習篇
- Linux C編程一站式學習
- UNIX環境高級編程
http://www.cnblogs.com/hbccdf/p/cplus_for_linux.html
