VS2019C++编译GDAL3.3.2+SQLite3+PROJ6+GEOS3.7.3+HDF4+HDF5
前言:
本篇为VS2019配置GDAL3.3.2+SQLite3+PROJ6+GEOS3.7.3+HDF4+HDF5的过程!
本篇为基于VS2019(MSVC),编译X64的Debug版本的静态库GDAL,其他版本会在中间注释。
1、准备
GDAL3.0以上编译要求PROJ6投影库,而PROJ6又要求SQLite3环境,所以编译GDAL之前我们需要编译好SQLite3和PROJ6。
GDAL本身没有自带HDF库,如果需要读取HDF4/5数据的话还需要集成GEOS库和HDF4/5库。
1.1下载
1.1.1下载库
(a,b,c必备,d,e,f可选)
注意:如果要配置GEOS,HDF4,HDF5,编译GDAL之前先配置这三个库,配置完再编译!
a. GDAL官方下载地址为GDAL官网,我下载的版本是gdal-3.3.2; b. PROJ6的官方下载地址为PROJ官网,我现在的版本为6.3.2版本; c. SQLite3的官方下载地址为SQLite官网,下载Source Code下的sqlite-amalgamation-3360000.zip ,和Precompiled Binaries for Windows下的sqlite-dll-win64-x64-3360000.zip (如果要配置32位GDAL,则下载sqlite-dll-win32-x86-3360000.zip ), sqlite-tools-win32-x86-3360000.zip 。
为了方便编译,我将下载的三个文件分别解压在F盘的GDALTools目录下GDAL、PROJ、SQLite文件夹内,以备后用。
d. GEOS下载,地址GEOS官网,我下的geos-3.7.3 ,后面需要编译; e. HDF4库下载,HDF4.2.6下载地址,HDF4.2.6_win_x64.zip (如果要配置32位GDAL,则下载HDF4.2.6_win_x86.zip ); f. HDF5库下载,HDF5-1.8.7下载地址,HDF5-1.8.7_win_x64.zip (如果要配置32位GDAL,则下载 HDF5-1.8.7_win_x86.zip ); e和f下载的就是编译好的,将下载的GEOS、HDF4、HDF5分别解压编译GDAL所需库和工具目录(我的是F:\GDALTools)下的supportlibs文件夹下,方便后面配置。
1.1.2工具下载
cmake官方下载地址为CMake官网,下载cmake-3.18.0-rc4-win64-x64.msi (编译32位GDAL则下载cmake-3.18.0-rc2-win32-x86.msi ,其实不太影响,32位的GDAL必须一套32位,强迫症罢了!)文件直接在windows上安装,安装过程中选择Add CMake to the system PATH for all users 或者Add CMake to the system PATH for the current users 为所有用户或者只为当前用户配置环境变量,以便在cmd命令行中使用。
安装完后win + R 输入 cmd 打开命令行,在命令行中输入cmake -version 查看cmake是否安装成功,出现以下内容即为安装成功!
2、编译
2.1 静态编译SQLite库
2.1.1 解压
将下载好的两个文件sqlite-amalgamation-3360000.zip 、和sqlite-dll-win64-x64-3360000.zip 解压到SQLite文件夹内,如下所示:
F:\GDALTools\SQLite
├─sqlite-amalgamation-3360000
│ shell.c
│ sqlite3.c
│ sqlite3.h
│ sqlite3ext.h
│
└─sqlite-dll-win64-x64-3360000
sqlite3.def
sqlite3.dll
2.1.2 创建静态库工程
-
在SQLite目录下创建一个新工程 -
选好工程创建位置之后,将sqlite3.c 、sqlite3.h 、sqlite3ext.h 、sqlite3.def 四个文件添加到工程中,如下图所示: -
右键点击项目名称,选择属性打开属性框: -
配置选择所有配置 ,平台选择所有平台 ,配置类型选择静态库(.lib) (如果要配置动态库,则选择 动态库(.dll) ) -
点击C/C++,选择预处理器,点击预处理器定义进行编辑 VS项目目录下一定要有文件,这样属性框才会显示C/C++选项 -
将以下内容添加到预定义处理里面 _USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY
-
设置模块定义文件,链接器 --> 输入 --> 模块定义文件 --> 编辑 -
最后点击属性框的应用 ,再点击确定 。 -
修改模块定义文件sqlite3.def ,在最后追加sqlite3_unlock_notify -
修改编译器配置类型为Debug,X64 编译64位Debug版GDAL选择 Debug,X64 编译32位Debug版GDAL选择 Debug,X86 编译64位Release版GDAL选择 Release,X64 编译32位Release版GDAL选择 Release,X86 -
最后生成解决方案 -
在F:\GDALTools\SQLite\SQLite3\x64\Debug (你的项目目录下)文件夹可以看到SQLite3.lib静态库(Release版在F:\GDALTools\SQLite\SQLite3\x64\Release 文件夹中)。 -
在SQLite目录中分别创建include和lib和bin文件夹,将刚才生成的SQLite3.lib 文件放入lib文件夹中,将sqlite-amalgamation-3360000 中的sqlite3.h 、sqlite3ext.h 放入include中,将sqlite-tools-win32-x86-3360000 中的sqlite3.exe放在bin文件夹中以备后用。
2.2、编译PROJ6
2.2.1 解压
- 将下载好的
proj-6.3.2.tar.gz 解压到PROJ文件夹中。
2.2.2 编译PROJ6
-
进入库文件夹中,在源码目录中创建build 文件夹,打开cmake。 -
Where is the source code 选择记得库文件夹所在路径,Where to build the binaries 选择你刚在所创建的build目录所在路径 -
点击左下角的Configure ,选择 Visual Studio 16 2019 和 x64 (编译32位则选择X86),然后点击Finish。 -
点击完Finish他会开始进行安装,会出现一些错误,如图: 这时找到Name 为EXE_SQLITE3 、SQLITE3_INCLUDE_DIR 和SQLITE3_LIBRARY 三个属性,可以看到现在它们的Value 值都为NOTFOUND或者其他路径的状态,这并不相符合,我们将SQLite3.exe 、include 和SQLite3.lib 的路径分别赋给它们,并找到Name为CMAKE_INSTALL_PREFIX 的属性设置文件生成目录,我设置的是F:\GDALTools\PROJ\OSGeo4W 。 -
重新点击Configure,提示Configuring done。点击Generate,提示Generating done。这时可以看到build 文件夹里有PROJ4.sln。 -
打开x64 Native Tools Command Prompt for VS 2019 (一般在开始菜单安装VS2019的文件夹里就能看到),进入build文件夹。 -
然后输入命令: msbuild ALL_BUILD.vcxproj /p:Configuration="Debug"
msbuild INSTALL.vcxproj /p:Configuration="Debug"
进行编译 第一行命令结果: 警告不影响,如果想消除警告,进入到..\PROJ\proj-6.3.2\src\transformations 将deformation.cpp 和helmert.cpp 用VS高级保存选项保存成Unicode - 代码页 1200 编码 如果没有"高级保存选项"请参考这篇文章 第二行命令结果: -
这时可以在设置的文件生成目录中找到生成的文件 bin 中有各种*.exe 文件、 include 中放有头文件、 lib 中是静态库文件、share 放有一些数据文件。到此PROJ编译完成。
2.3 编译GEOS库
2.3.1 修改nmake.opt 文件
-
首先进入GEOS源码文件夹中的,修改nmake.opt文件 -
26行的BUILD_DEBUG = 设置成YES(如果是Release版,设置为NO) -
56行的WIN64= 设置成YES(如果是编译32位,设置为NO) -
166和167行的GEOS_MSVC 和GEOS_MSC 分别按照自己的MSVC版本修改
2.3.2 进行编译GEOS库
-
管理员运行x64 Native Tools Command Prompt for VS 2019 (在开始菜单中)(编译32位则选择x86 Native Tools Command Prompt for VS 2019 ),cd 进入GEOS 文件夹下,输入以下命令: autogen.bat
nmake -f makefile.vc
没有报错说明编译成功! -
可以看到GEOS源码目录下的src文件夹中生成的.lib和.dll文件,一共5个。
2.4 编译GDAL库
2.4.1 解压
- 将下载好的
GDAL3.3.2 解压到GDAL 文件夹内。
2.4.2 修改nmake.opt文件
进入GDAL源码文件夹中,找到nmake.opt 文件打开。
-
42行左右的MSVC_VER= 设置为1929 ,具体数字根据自己的MSVC版本设置; -
66行左右的GDAL_HOME = 设置成想要的位置,我设置成F:\GDALAllVersions\GDAL_Static_MSVC_Debug_X64 ; -
130行左右的DEBUG=0 改为DEBUG=1 ;(如果是Release版,设置为0) -
213行左右的#WIN64=YES 去掉#号注释,变为WIN64=YES ;(如果是编译32位,设置为NO) -
240行左右的DLLBUILD=1 改为DLLBUILD=0 ,1 启动动态编译、 0 为静态编译。我这里进行静态编译设置DLLBUILD=0 ; -
260行和264行左右找到PROJ_INCLUDE PROJ_LIBRARY ,分别设置成你刚才生成PROJ时的include 和lib 文件夹(其中PROJ_INCLUDE 的-I 后为地址),并将.lib的名称改对,最后去掉#号注释。
PROJ_INCLUDE = -IF:\GDALTools\PROJ\OSGeo4W\include
PROJ_LIBRARY = F:\GDALTools\PROJ\OSGeo4W\lib\proj_d.lib
-
650行和651行左右,找到SQLITE_INC , SQLITE_LIB 分别设置成你刚才创建在SQLite文件夹里的include 和lib 文件夹(其中SQLITE_INC 的-I 后为地址),并将.lib的名称改对,最后去掉#号注释。
SQLITE_INC=-IF:\GDALTools\SQLite\include
SQLITE_LIB=F:\GDALTools\SQLite\lib\SQLite3.lib
-
753行,754行,755行左右找到GEOS_DIR ,GEOS_CFLAGS ,GEOS_LIB
将其修改为: GEOS_DIR=F:\GDALTools\supportlibs\geos-3.7.3
GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS
GEOS_LIB = $(GEOS_DIR)/src/geos_c_i_d.lib
注意,geos_c_i_d.lib是debug版本的库,编译release版本时使用geos_c_i.lib -
581行左右,找到HDF4_PLUGIN ,HDF4_DIR ,HDF4_LIB ,HDF4_INCLUDE
将其修改为: HDF4_PLUGIN = NO
HDF4_DIR = F:\GDALTools\supportlibs\HDF4.2.6_win_x64
HDF4_LIB = $(HDF4_DIR)\dll\hd426m.lib $(HDF4_DIR)\dll\hm426m.lib \
$(HDF4_DIR)\lib\hd426.lib $(HDF4_DIR)\lib\hm426.lib Ws2_32.lib
HDF4_INCLUDE = $(HDF4_DIR)\include
-
593行左右,找到HDF5_PLUGIN ,HDF5_DIR ,HDF5_LIB ,HDF5_INCLUDE
将其修改为: HDF5_PLUGIN = NO
HDF5_DIR = F:\GDALTools\supportlibs\HDF5-1.8.7_win_x64
HDF5_LIB = $(HDF5_DIR)\dll\hdf5dll.lib
至此,GDAL的namke.opt文件修改完毕,保存文件!
2.4.3 编译GDAL
-
打开x64 Native Tools Command Prompt for VS 2019 (编译32位则选择x86 Native Tools Command Prompt for VS 2019 ),进入GDAL文件夹下,运行以下三行命令: nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
第一行命令结果: 第二行命令结果: 第三行命令结果: -
最后,记得将hdf4和hdf5库中的dll文件夹下的.dll 文件(总共18个,因为重复2个,所以加进去为16个)、GEOS库文件夹下src文件夹中geos_c_d.dll 文件,都拷贝到GDAL编译后存放的目录下的bin文件夹下,否则会提示你找不到xxx.dll 文件。
3、设置环境变量
3.1 设置GDAL环境变量
右键 此电脑 --> 属性 --> 高级系统设置 --> 环境变量 --> 找到下面系统变量里面的Path,双击 --> 将编译好的GDAL的bin文件夹路径添加到里面。比如我的路径是F:\GDALAllVersions\GDAL_Static_MSVC_Debug_X64\bin
3.2 设置PROJ环境变量
将生成的OSGeo4W文件夹下的share文件夹下的proj文件夹路径添加到Path
比如我的路径是F:\GDALTools\PROJ\OSGeo4W\share\proj
3.3 重启电脑生效
至此,GDAL3.3.2+SQLite3+PROJ6+GEOS3.7.3+HDF4+HDF5 编译完成!
4、进行GDAL测试
4.1创建VS空项目
- 创建VS空项目如下:
4.2 配置GDAL库
-
首先创建一个main.cpp,使项目属性具有C/C++选项。 -
右键 项目–> 属性 --> C/C++ --> 附加包含目录–>添加所编译的GDAL的include文件夹路径 -
点击链接器-附加库目录-编辑添加GDAL的lib文件夹路径 -
点击链接器-输入-附加依赖项-编辑添加gdal.lib ,点击应用-确定。 -
选择配置Debug、平台x64(选择你所编译的版本配置平台)即可运行程序。
4.3 进行GDAL库测试
5、致谢
非常感谢这些大神的帮助!!! 排名不分先后,皆为大神!!!
- 大神1
- 大神2
- 大神3
- 大神4
- 大神5
- 大神6
- 大神7
- 大神8
|