赞
踩
最近开发需要用到qgis,首先根据网上的教程把RelWithDebInfo版本编译出来了,用了好大劲,终于编译debug版本成功,记录一下遇到的关键问题。
由于qgis编译用到OSGeo4w,而其中提供的库都是release的,直接编译debug版本的qgis,在运行qgis.exe时会在程序QCA相关函数中崩溃,因此我先编译了QCA的debug版本,用来替换编译qgis时cmake的Configure中的QCA库。
QCA编译网上教程有,记录一个关键点:
不要用openssl-1.1.0以后的版本,我用的版本是openssl-1.02d。因为网上的安装教程基本都是用命令ms\do_nasm,ms\do_win64a这些,但是1.1.0版本配置后不会在文件夹ms下生成这些命令,并且编译后,不生成ssleay32.lib,这个静态链接库是用来生成QCA的。用1.0.2版本按照网上教程则没问题,我猜测新版本应该是生成库换了名字,但是没有尝试用新的库生成qca,毕竟编译一次qgis很花时间。
我参考的编译教程:https://blog.csdn.net/octdream/article/details/75043138
qgis编译也有很多教程,具体细节就不写了,记录几个遇到的问题:
1 vs编译过程中提示“常量中有换行符”,这个问题都是在字符串中产生的,我的解决办法是找到源文件中提示错误的字符串,在字符串的末尾加一个空格,不知道有没有更好的办法。另外2.18.20里面这个错误很少,就几个,但是3.0.3版本就非常多。
2 <netinet/in.h>:具体错误内容忘了,意思就是打不开这个头文件,注释掉,改成:
//#include <netinet/in.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
3如果编译3.0.3版本,出现有关qMakePair的错误,把出现错误的的qMakePair改成QPair<int, int>,源代码中有很多地方都用到qMakePair但是出错文件中qMakePair(int, int)调用很少,找到更改即可。
4编译中有几项过不去,大部分是关于python的,只用c++的话,可以不用管,没啥影响,在INSTALL的时候,最后也是失败的,不过也没有影响。
5启动qgis.exe的问题,在2.18.20版本中,启动qgis.exe之前要在vs项目属性中添加qtmaind.lib库,注意这里是带"d"的,RelWithDebugInfo版本则添加qtmain.lib库。具体位置是属性->链接器->输入->附加依赖项。启动qgis.exe后依然会崩溃掉,我是在myPrint("Info:%s\n", msg);这句话,不影响Qt使用编译好的debug版本qgis库。在3.0.3版本中,不需要增加依赖库,启动qgis.exe也会崩溃掉,但是否影响使用没有试过。
虽然不影响使用,但是还是打算查一下debug下qgis.exe崩溃的原因,还有虽然我也编译了3.0.3版本,但是由于网上教程都是2.x版本,所以还是放弃新版本了,有兴趣的同学可以试一试这种方式3.x版本的debug是否好用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。