编写本文的目的
主要是分享自己在手动编译gdal过程中遇到的问题,供想自己折腾和不想在windows上安装conda的群体参考
从零开始编译(试错)
-
编译环境:msvc+cmake
-
下载gdal源码
https://github.com/OSGeo/gdal/releases/download/v3.9.2/gdal-3.9.2.tar.gz
解压gdal的源码,进入文件夹,在命令行中输入
cmake --build your/cmake/build/path --target GDAL --config Debug
--config Debug
是可选的
不出意外的话,你应该会收到缺少PROJ库的提示
接下来让我们再下载PROJ库
https://proj.org/en/9.5/download.html
打开以后,同样用cmake进行编译
cmake --build your/cmake/build/path --target proj --config Debug
接下来,你会收到缺少tiff库的提示
重复上面的步骤,最后你会发现,tiff又依赖于sqlite库
我们再下载sqlite库的源码,这个时候你发现,sqlite库是如此的朴实无华,仅仅只有五个文件,也没有什么其他的依赖关系,终于可以长舒一口气了
好了,这下我们可以安心编译了
编译SQLite库
为了省时省力,我们采用轮椅一点的方式,打开Visual Studio,新建空项目,将SQLite的文件按照图示的方式复制过来
随后,项目的配置类型改为静态库;在配置属性中C/C++项目的预处理器定义改为:
_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY
并且在sqlite3.def的末尾加上sqlite3_unlock_notify
最后,在链接器-输入-模块定义文件中修改为sqlite3.def
最后CTRL+B生成.lib文件,整理.lib文件(如果有.pdb和.idb文件要一并带上)和头文件,放在你想要的目录下
编译CURL库
当SQLite库编译完后,你可能认为万事大吉了,但实际上,proj库还有对curl库的要求,您还需要编译curl库
我们正常地下载curl的源码,换一个轮椅,采用对cmake支持比较好的CLion打开文件夹
然后,build curl项即可
对于其中的预警信息,比如Perl和libpsl找不到都可以忽略,即使不存在相应环境也可以正常编译
你可能在CLion中找不到install项,没关系,复制指令,在自己的命令行中执行,把–target后面的项改为install即可,随后便可以依据提示信息找到.lib、.pdb、.dll文件
编译TIFF、PROJ、GDAL库
如法炮制,编译tiff时,记得在CLion中配置cmake属性(-DSQLite_INCLUDE_DIR
-DSQLite_LIBRARY
)
同样地,编译PROJ时需要提供TIFF_INCLUDE_DIR
TIFF_LIBRARY
CURL_INCLUDE_DIR
CURL_LIBRARY
这里需要注意的是,编译PROJ库时,可能会有相当多的警告信息,没事,这些都是缺少部分依赖库(或者换个说法,扩展库)的表现,依据提示信息不管或者自己再手动编译所需要的库即可
最后,编译gdal库就编译成功了