VS2017编译最新版GDAL3.2及其最新版依赖库
VS2017编译最新的GDAL3.2.0
一堆的源码
GDAL3.2.0
PROJ7.2.0
Sqlite3.3
sqlite3官方网站
sqlite3主要是下载这两个压缩包:
GEOS3.8.1
TIFF4.1.0
CURL7.73.0
辅助工具
cmake
cmake是windows下很强的一个编译工具。其下载地址如下:cmake下载地址
everything
everything这个软件主要是为了搜索一些Windows链接库,这是:Everything下载链接
notepad++
notepad++则主要是为了修改一些文件里面的东西,这里就不贴链接了,网上随便下。
准备工作
编译Sqlite3
VS2017新建一个空项目,名为sqlite3,叫别的名字也行。项目添加现有项,选择sqlite3的源码,如下图所示:
sqlite3的编译,需要编译几个东西:
- 编译lib库,Debug和Release版本都要;
- 编译.exe的可执行文件,需要的话debug和release版本;
- 编译.dll库,这个需要添加那个sqlite3.def文件。
项目中修改编译的类型的就再项目属性界面的红框处修改,上面每一个都要编译一次。
编译完了之后,新建一个sqlite3的文件夹(任何你想放的地方),在这个文件夹下新建bin、lib、include三个文件夹,将编译生成的.exe和.dll复制到新文件夹的bin目录下,将sqlite3的源码复制到include文件夹下,将生成的.lib文件复制到lib文件夹下。
编译TIFF
下载tiff的源码并解压,打开cmake软件,将tiff源码目录下的cmakelist.txt文件拖到cmake中,如下:
选择了编译器之后,点击configure。这一步一般不会报错。然后修改以下项:
这一步的路径是你最后选择install之后,lib库等的安装位置。cmake_install_prefix就是cmake的安装前缀,即安装路径。
修改了之后点击generate按钮,会生成相应的项目解决方案。如下所示:
选择用VS2017打开tiff.sln,然后进行如下两步:
-
先AllBuild,debug和release
-
再安装(install),debug和release。(这一步就是吧生成的库安装到你再cmake中选择的cmkae_install_prefix的那个目录下)
编译CURL
CURL的编译跟tiff的编译一模一样,这里不多说。
编译PROJ
proj的编译,需要添加sqlite3的库,如下图所示:
修改上面几步。然后点击generate生成VS项目解决方案。
使用VS打开项目。
其他步骤和上面编译tiff的一样。但是有几点需要注意。
- test_network添加预处理器命令“WIN32_LEAN_AND_MEAN”
- 编译过程中提示的大部分问题,基本都是没有添加相应的库。
在vs项目的ALL_BUILD项目中,添加sqlite3的lib库的路径,添加curl的库路径。就在项目属性的库目录中添加即可。
这一步做完,先编译proj这个项目,再去编译ALL_BUILD,然后最后选择INSTALL生成。
编译GEOS
GEOS的源码目录中有cmakelist.txt文件,因此跟前面编译tiff一样。这里不多BB。
GDAL的编译
GDAL的编译比较复杂。
生成VS项目
命令提示符或者Windows power shell切换到GDAL的源码目录,然后运行如下命令:
命令如下:generate_vcxproj 15.0 64 gdal_vs2017,这个命令是源码自带的Windows批处理命令,用于生成vs的项目文件
命令结束之后,会在源码目录下生成以下文件:
.sln文件不是命令生成的。
修改nmake.opt文件
这个文件其实就是nmake命令的配置文件。其中有一些地方需要修改,如下面的几张图里面的内容:
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
下面的内容很重要很重要
编译源码生成库
选择解决方案的批生成,勾选debug和release,这一步完了之后,只是构建结束。
install生成可执行文件
这一步是生成可执行文件,在VS的项目属性-nmake命令,修改如下:
注意,debug和release都要修改
devinstall生成目标库
修改命令如下:
同样,debug和release版本都要修改成这个命令
最后结果
就是生成gdal的静态库
结语
在编译这个鬼东西的时候,各种依赖库都缺,折腾了一个多星期才最终解决。如果你觉得有用,不妨点个赞。。。