本文主要是介绍VS2017 + Win10 下的 OpenCPN 5.0.0 编译过程小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文介绍了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
- 资源汇总
- 资源汇总-OpenCPN源码含所有submodule(1/2)
- 资源汇总-其他必需的安装包及库文件(2/2)。
有些资源下载的很慢,如果实在下载不到,可以用我提供的,源码文件太大超过 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
),如果实在下不到,可以采用我提供的这些文件,不过,自己试一试走一遍流程,可能印象会更深刻。
这篇关于VS2017 + Win10 下的 OpenCPN 5.0.0 编译过程小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!