前言
因为工作需要,需要在基于MinGW编译的Qt中使用proj4,后期还需要与gdal联动。在网上搜索很久,只找到了cmake+vs、运用nmake以及在linux系统下的qt配置教程。本来以为按照上述方法编译配置的proj4库可以完美使用,并且可以实现与gdal联动,但是在测试的时候发现不是报错显示无法找到libproj-9.dll,就是qt不识别。参考了MinGW编译OpenCV,itk,vtk等库的方法,也找了proj的官方文档,研究了半天,终于找到了编译的方法。
编译好的库的下载地址
proj4.9.1
proj5.2.0
编译过程
准备工作
下载MinGW64,Msys,proj4源代码
MinGW:http://www.mingw-w64.org/doku.php
proj4:https://proj.org/download.html
Msys:https://www.msys2.org/
如果电脑中已经安装好Qt,可以使用qt自带的MinGW
Msys与MinGW联合配置教网上有很多,因为我用的电脑是已经配好的,这里就不写了,大家可以自己查找。这里介绍两种方法
方法一:MinGW编译
1、使用cmake对proj进行编译。选择mingw makefiles,然后选择specify native compiler
2、c选择F:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin\gcc.exe
c++选择F:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin\g++.exe
为了保险起见,最好选择qt自带的mingw64编译器,也就是
c选择F:\Qt\Qt5.12.9\Tools\mingw730_64\bin\gcc.exe
c++选择F:\Qt\Qt5.12.9\Tools\mingw730_64\bin\g++.exe
更改cmake_install_prefix到想要安装的路径。
3、对于编译proj5.2.0一直报错的问题,通过configure后去掉use_thread,proj_tests,build_testing,仍然报错,并且问题一直处在googletest文件内,更换版本为5.0.0或者4.9.1后问题解决,并且不需要对上述选项进行修改。
4、如果不想更换版本,参看CMakelists.txt文件,发现包含了子目录test。这个文件夹中包含了使用mingw64生成时一直存在问题的googletest文件。删除googletest文件后,使用cmake进行configure时报错如下:
查看上面路径下的cmakelists.txt文档,发现文档中有如下命令
说明在configure的过程中对Googletest也进行configure,所以单纯的将googletest文件删除不能解决问题,需要将unit文件夹一同删除,并且将test文件下的cmakelists.txt中的最后一句进行注释或者删除。
5、如果需要编译动态库,可以在configure时勾选build_libproj_shared。
6、Win+R 输入cmd,点击确定输入proj所在盘,回车,再输入cd path(刚才生成的build文件夹的路径),回车,然后再输入mingw32-make ,回车。示例如下图所示:
上述过程结束后,输入mingw32-make install,回车,即可在之前使用cmake进行configure时设置好的安装目录下看到如下文件夹,生成的头文件和库文件都在local文件夹中。
方法二:使用Msys
1、打开msys下mingw64 shell,然后输入 cd proj/路径
2、输入./configure --prefix=/安装/路径
3、Configure结束后输入make,如果此时显示command not found,则需要打开另一个shell,然后输入pacman -S msys/make,安装完毕后,再输入一次make就可以了。
4、结束后输入make install
过程示例如下图所示。