本文介紹了OpenCPN 5.0.0
版本的編譯過程,官方網站給出了一個流程,但是親測後發現還是有一些小坑,官方給出的命令行操作由於網絡(可能需要科學上網)不一定暢通,導致難以下載成功,在此把本人成功配置並編譯的過程分享出來,讓需要的人少走彎路。
目標
基於VS2017(對應VC15)
編譯最新版OpenCPN的 debug
和 realease
版本。
參考資料
- OpenCPN Github
- OpenCPN Manuals - Compiling on Windows
- OpenCPN Manuals - Compile 2015 VS Community Workflow
下載彙總
- Visual Studio Community 2017 (version 15.9)
- Git
- CMake
- POedit
- NSIS
- 7-Zip
- OpenCPN 預編譯Windows依賴 - OpenCPN_buildwin-4.99a.7z
- 界面庫源碼 - wxWidgets 3.1.2.zip
- 編譯 Debug 版本的 batch 複製命令 - copyfiles.bat.doc
- 資源彙總
有些資源下載的很慢,如果實在下載不到,可以用我提供的,源碼文件太大超過 440M 只能分成兩個資源,每個只要2分,賺個辛苦錢我也好下點資源,謝謝支持。
編譯流程
- 安裝VS2017,這一步就不展開了,OpenCPN 官網提到如下要求,注意勾選即可。
Install and select the workload Desktop development with C++ and include component Windows XP support for C++.
Also include the appropriate Windows x SDK component. Generally install the most current version, Windows 10 preferred.
- 【必須】安裝
Git
和CMake
, 對應官網都有安裝包,找最新的版本下載來安裝就好了。 - 【必須】安裝並
POedit
, 配置系統環境變量,在PATH中添加
C:\Program Files (x86)\Poedit\GettextTools\bin
- 【非必須】安裝
NSIS
,OpenCPN
提供的網址裏的 download 指向錯誤,在sourceforge
上找到了下載鏈接,見下載彙總,這個主要用於製作安裝包的,如果只是用調試版,暫時用不上這個。 - 【不重要】安裝
7-Zip
, 我是把 32 位和 64 位的都安裝了,這個主要是解壓下載彙總中的預編譯依賴壓縮包用的,有其他常用的解壓工具的話也不是很需要這個。 - 下載
wxWidgets 3.1.2
源碼並編譯。
- 【注意】雖然
wxWidgets
官網提供了Win
下預編譯好的庫,但是隻有release
版本,我們這裏直接從源碼編譯debug
和release
版本的庫,下載官方的最新源碼壓縮包,這裏一定注意,下載這個Zip
文件。利用git clone
和或下載下面的source code
中都沒有submodule
,雖然利用git
的git submodule update
命令理論上可以下載到這些子模塊,但是親測由於網絡原因幾乎無法成功下載,所以還是老實的去上面這裏下載。下載Zip
完成後,注意有些教程可能說到進入\wxWidgets-3.1.2\build\msw
然後找到wx_vc15.sln
的工程打開後生成庫,我在這裏走了彎路,經過測試,這麼做會報錯,並且不好解決,還是嚴格按照官網的配置流程來,打開x86 Native Tools Command Prompt for VS 2017
後輸入如下命令:
cd xx/wxWidgets-3.1.2/build/msw
//改到自己的路徑
nmake /f makefile.vc BUILD=release SHARED=1 CXXFLAGS=/D_USING_V141_SDK71_ CFLAGS=/D_USING_V141_SDK71_ LDFLAGS=/SUBSYSTEM:WINDOWS,5.01
nmake /f makefile.vc BUILD=debug SHARED=1 CXXFLAGS=/D_USING_V141_SDK71_ CFLAGS=/D_USING_V141_SDK71_ LDFLAGS=/SUBSYSTEM:WINDOWS,5.01
- 【提示】用
Win+S
彈出的搜索框中輸入x86 Native
後就會很容易找到x86 Native Tools Command Prompt for VS 2017
。 - 隨着一陣嘩嘩的輸出,
release
版本的編譯完了,按一下回車,繼續debug
的編譯。編譯完了後在\wxWidgets-3.1.2\lib\vcdll
就能看到debug
和release
版本的編譯好的庫。 - 【重要】編譯結束後,設置系統環境變量
wxWIDGETS_ROOT_DIR
路徑爲wxWidgets
源碼的頂級目錄。
- 下載
OpenCPN
源碼, 在你想放置OpenCPN源碼的文件夾下,右鍵選擇Git Bash Here
, 複製下面的命令後回車就可以直接從github
克隆到本地了:
git clone https://github.com/OpenCPN/OpenCPN
- 下載
預編譯Windows依賴 - OpenCPN_buildwin-4.99a.7z
,然後解壓到\xx\OpenCPN\buildwin
也就是複製到你clone
的OpenCPN
源碼目錄中的buildwin
目錄下。 OpenCPN
編譯之Release
版本的編譯
- 首先配置工程,打開
x86 Native Tools Command Prompt for VS 2017
進入\xx\OpenCPN\
路徑後輸入如下命令:
cd xx\OpenCPN\
//還是一樣,換成你自己的路徑
mkdir build
cd build
cmake -G "Visual Studio 15 2017" -T v141_xp ..
- 完成後
build
中就生成了OpenCPN.sln
工程文件,官網的編譯命令如下:
cmake --build .
cmake --build . --config release
cmake --build . --config release --target package
- 如果不採用命令行編譯,也可以直接打開
OpenCPN.sln
工程進行編譯,因爲這裏大概率會報錯,用VS編譯比較方便定位錯誤,我建議直接打開VS工程編譯。打開\build\OpenCPN.sln
工程文件我們來跑一跑OpenCPN
看看能不能運行起來。 - 打開工程後,把
opencpn
右鍵設置爲啓動項目,我這裏先選擇的是Release(Win32)
然後點擊運行吧。不出所料,果然出現了一個錯誤,我們定位到報錯行:
xx\OpenCPN\src\options.cpp(8867): error C2001: 常量中有換行符
- 看起來是中文字符的問題,查了查資料發現改起來好像比較麻煩,這個字體應該表示繁體中文,我們先把它隨便改成英文試一試,例如
“正體字”
改成“zhengti”
(很隨意的不要糾結),繼續點擊運行,看看還有沒有錯誤沒有解決。 - 剛纔字體的問題暫時解決了,但是出現了新的問題:
- 這個就比較常見了,點擊運行的時候提示缺少一些
dll
,一般是沒有加入系統環境變量或者複製到對應的Debug
和Release
文件夾下,提示缺少一些wx
相關的dll
,那麼大概率就是我們之前的編譯好的界面庫沒有加入系統環境變量,雖然我們之前設置了wxWIDGETS_ROOT_DIR
這一變量,但是我們的dll
文件在wxWidgets-3.1.2\lib\vc_dll\
路徑下,所以我們把這個路徑加入系統環境變量PATH
中。 - 仔細檢查官網步驟,其實還有一步配置:下載
Copyfiles.bat.doc
(見下載彙總)並刪去後綴名.doc
移動到\xx\OpenCPN\
下面後執行copyfiles.bat
(這步不做可能還是會缺幾個dll
)。 - 做完上面兩步,重啓一下VS2017,再打開
OpenCPN.sln
,直接執行,果然成功了。
OpenCPN
編譯之Debug
版本的編譯
- 將
OpenCPN.sln
工程中的項目改成Debug(Win32)
運行一下,一切都運行正常,那麼試一下加斷點吧: - 也沒有出現什麼問題,至此
Debug
和Release
版本的OpenCPN
都編譯並測試完成了。
小結
- 其實,官網文檔已經夠用了,我這裏大多也只是翻譯了一遍,只要嚴格按照官網提供的步驟,一步一步進行是肯定能夠編譯成功的。
- 唯一出現的一點小問題就是最後缺少
dll
的問題,這個小問題憑藉我們一般編譯項目的經驗就可以解決。 - 目前遺留的小問題是中文字符的問題,也是個麻煩事,暫時沒去解決。
- 特別需要注意的是,如果對某一模塊有指定版本,那麼官網都給出了具體的版本號,比如界面庫是
3.1.2
,在不熟練的情況下,第一次編譯最好嚴格按照官網說明的版本進行,可能會少走彎路。 - 最後我把中間需要用到的安裝包和庫都放在一起(除了
VS2017
,Git
和CMake
),如果實在下不到,可以採用我提供的這些文件,不過,自己試一試走一遍流程,可能印象會更深刻。