VS2015编译GDAL3.2.0及相关依赖库

GDAL3.2开发环境搭建

Posted by Tao on Saturday, August 6, 2022

0、背景

GDAL目前已经更新到3.5版本,也支持了cmake的编译配置。但因开发环境限制于VS2015,所以本文选用GDAL3.2版本运用nmake进行编译配置,用到的相关库也选用了对应的兼容版本。

本文使用的库的相关版本如下:

  • GDAL3.2.0
  • CURL7.73.0
  • TIFF4.2.0
  • PROJ6.3.2
  • SQLITE3.36.0
  • GEOS3.7.5

1、sqlite3库

打开SQLite官网下载界面,可以看到多种压缩包供下载,现介绍以下五种:

  • sqlite-amalgamation-3390200.zip: sqlite3源码包Amalgamation版本(混合版)。sqlite3源代码库总共大概有100多个C文件,所谓Amalgamation版本,即是把这100多个C文件合并到了一个sqlite3.c文件中了。
  • sqlite-doc-3390200.zip: sqlite3的相关文档
  • sqlite-dll-win32-x86-3390200.zip: Windows平台预编译32位版动态链接库
  • sqlite-dll-win64-x64-3390200.zip: Windows平台预编译64位版动态链接库
  • sqlite-src-3390200.zip: sqlite3源码包(原始版)

这里我们可以有如下三种方式来编译sqlite3,生成我们想要的sqlite3.lib以及sqlite3.dll:

  • 基于预编译好的sqlite3动态链接库生成sqlite3.lib,以及sqlite3.h头文件
  • 基于Amalgamation源代码编译sqlite3.lib以及sqlite3.dll
  • 基于sqlite3源码编译sqlite3.lib以及sqlite3.dll

说明: 如果没有特殊要求,可直接下载sqlite-dll-xxx.zip内的dll,如果不放心就自己编译。正常情况下建议直接下载sqlite-dll-xxx.zip来使用

下面我们分别介绍。

a.基于预编译好的动态链接库来编译

打开下载的sqlite-dll-win64-x64-3390200.zip文件,通过内部的.def文件和.dll文件生成对应的sqlite3.lib。

# lib /def:sqlite3.def                  //采用缺省的方式生成lib库(32位版)
# lib /def:sqlite3.def /machine:x86     //明确指定生成x86版本的lib库
# lib /def:sqlite3.def /machine:x64     //明确指定生成x64版本的lib库 (我们这里用此命令)

运行上述对应命令即可生成.lib文件。

b.基于sqlite3 Amalgamation版源代码编译

此方法网上一搜一大把,在此不做赘述。即通过sqlite3.c、sqlite3.h、sqlite3ext.h、sqlite3.def等文件建立工程并编译。

c.基于sqlite3源码编译

因为sqlite官网上只能找到最新版本的预编译文件(可能我没找到),所以如果要使用老版本的sqlite必须要通过源码编译。

安装tcl

虽然sqlite3本身并不依赖tcl,但是编译时会用到tcl工具,这里我们可以到tcl官网去下载安装。这里我们安装ActiveTcl 8.6版本。安装步骤较为简单,这里不做介绍。

编译sqlite3源码

首先解压sqlite-src-3290000.zip,然后以管理员身份运行“VS2015 开发人员命令提示”,然后切换到上面的解压目录,执行如下命令:

# nmake /f Makefile.msc TOP=..\sqlite
# nmake /f Makefile.msc clean TOP=..\sqlite

整理编译得到文件

最后整理一下编译得到的文件。新建文件夹sqlite,其中新建子文件夹binincludelib,将文件整理进去,最后得到的文件目录如下

|-- sqlite
    |-- bin
    |   |-- SQLite.exe
    |-- include
    |   |-- sqlite3.h
    |   |-- sqlite3ext.h
    |-- lib
        |-- SQLite.lib

2、curl库

针对curl库依然是下载git仓库源码,然后切换到自己想要的版本,最后通过CMake编译。这里不做过多介绍。

3、libtiff库

libtiff下载

Libtiff是一个用来读写TIFF图片的库,在GDAL中主要用于tiff格式栅格图像的读取与写入。

官网镜像站下载libtiff各版本压缩包,在此为了适配较低版本的gdal库,我们选择不那么新的4.2.0版本。

libtiff编译

解压下载的压缩包,打开cmake-GUI,选择tiff源码目录和待输出目录,如下:

tiff1

配置并生成VS工程,生成工程后编译ALL_BUILD和INSTALL工程。

tiff2

上述步骤完成后将在预先设置的生成目录成功生成相关库文件,如下:

tiff3

4、Geos库

同curl直接cmake配置编译,操作流程如下图:

geos_1 geos_2

最后编译成功如下:

geos_3

5、proj6

proj6下载

PROJ6下载

proj_1

根据需要选择对应版本即可,这里我下载的是proj6的最后一个版本6.3.2。

proj6编译

手动创建proj_install便于存放后面生成的proj库。

编译proj6库需要依赖前面编译的sqlite库,在cmake界面程序中打开并修改sqlite相关目录和proj待输出目录,如下:

proj_2

6、GDAL3.2.0编译

编译好了上面的5个依赖库,最后来编译GDAL。

文件下载

下载GDAL3.2.0,两种方式,官网git仓库并用git checkout -tag命令切换为想要的版本。

编译

生成VS项目

以管理员权限打开VS2015 x64 Native Tools Command Prompt。进入解压后的文件夹,运行generate_vcxproj.bat。根据提示,生成VS2015项目文件:

gdal_1

修改nmake.opt文件

参考:https://blog.csdn.net/FL1623863129/article/details/120467213

开始编译

VS2015 x64 Native Tools Command Prompt命令行窗口中,输入以下指令:

nmake -f makefile.vc MSVC_VER=1900 WIN64=1 ANALYZE=1 WITH_PDB=1
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 install
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 devinstall

第一行命令用于编译带调试信息的GDAL库;
第二行命令用于编译GDAL库,并将生成的dll和exe等文件复制到先前设置的输出目录;
第三行命令用于编译GDAL库,并将开发用的include和lib文件夹复制到输出目录。

至此,GDAL3.2.0编译完毕。

参考文章

  1. windows平台sqlite3的编译及简单使用
  2. GDAL3.1.3+PROJ7.1.1编译说明
  3. GDAL源码编译vs2015/vs2017/vs2019

「如果这篇文章对你有用,请随意打赏」

Heisenberg Blog

如果这篇文章对你有用,请随意打赏

使用微信扫描二维码完成支付


comments powered by Disqus