0%

VS2010编译GDAL2.2.4 32位和64位

  1. 前言
  2. GDAL库的编译流程(32位)
  3. 编译64位的注意事项

https://blog.csdn.net/sunriver2000/article/details/105601627

编译流程参考自:https://blog.csdn.net/sunriver2000/article/details/105601627

GDAL官方教程:https://trac.osgeo.org/gdal/wiki/BuildingOnWindows

64位注意事项参考自:https://blog.csdn.net/q_l_s/article/details/52468354

前言

GDAL库的64位和32位编译方式略有不同,涉及到修改配置文件的内容,但整体操作流程一至,因此第一部分描述了编译GDAL库的完整过程,编译产物为32位的库,第二部分阐述编译64位时需要针对第一个部分进行哪些修改。

GDAL库的编译流程(32位)

GDAL2.2.4代码仓库及下载地址:

解压后进入“gdal文件夹”:

image-20210906195448394

打开“Visutal Studio命令提示工具(2010)”,cd到这个目录下

image-20210906195718242

在开始菜单可以找到这个工具,或者直接打开命令行输入以下命令启动VS的命令提示工具:

1
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86

运行以下命令进行编译

1
nmake /f makefile.vc

编译完成后,进行安装

一、首先设置安装目录,打开文件“nmake.opt”,找到字段GDAL_HOME,改成自定义的目录:

GDAL_HOME = "D:\gdal\gdal-2.2.4\gdal\install" (绝对路径,相对路径会报错)

二、运行命令进行安装:nmake /f makefile.vc install,该命令执行完成后,安装文件夹出现“bin”、“data”、“html”文件夹

三、运行命令:nmake /f makefile.vc devinstall,执行完成后安装文件夹出现“include”和“lib”文件夹

编译64位的注意事项

如果已经将源代码编译生成了一次32位的库,那么建议将生成的文件拷贝保存后将源码文件删除,重新解压一份未编译的源码来生成64位。

编译64位需要使用另一个工具:“Visual Studio x64 Win64 命令提示(2010)”,在这个工具中使用nmake生成的库就是64位的。或者在命令行输入以下命令来启动工具:

1
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64

如果直接在这个工具中进行编译,会产生如下错误提示

1
2
3
4
5
6
7
8
9
10
11
12
13
   正在创建库 gdal_i.lib 和对象 gdal_i.exp
LINK : error LNK2001: 无法解析的外部符号 _OSRValidate
LINK : error LNK2001: 无法解析的外部符号 _OPTGetProjectionMethods
LINK : error LNK2001: 无法解析的外部符号 _OGR_G_GetPointCount
LINK : error LNK2001: 无法解析的外部符号 _OGRRegisterAll
LINK : error LNK2001: 无法解析的外部符号 _GDALSimpleImageWarp@36
LINK : error LNK2001: 无法解析的外部符号 _GDALReprojectImage@48
LINK : error LNK2001: 无法解析的外部符号 _GDALComputeMedianCutPCT@32
LINK : error LNK2001: 无法解析的外部符号 _GDALDitherRGB2PCT@28
LINK : error LNK2001: 无法解析的外部符号 _OCTNewCoordinateTransformation@8
gdal202.dll : fatal error LNK1120: 9 个无法解析的外部命令
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\amd64\link.EXE"”: 返回代码“0x460”
Stop.

解决方法:

打开“nmake.opt”,找到SYM_PREFIX=_,将其下划线去掉改成SYM_PREFIX=

打开“makefile.vc”,找到

1
2
3
4
5
BASE_INCLUDE =	/INCLUDE:_GDALSimpleImageWarp@36 \
/INCLUDE:_GDALReprojectImage@48 \
/INCLUDE:_GDALComputeMedianCutPCT@32 \
/INCLUDE:_GDALDitherRGB2PCT@28 \
/INCLUDE:_OCTNewCoordinateTransformation@8

去掉下划线和@数字,加上前缀(这部分代码下面有一个一样的,直接拷贝上来也行,省得一个个改)

1
2
3
4
5
BASE_INCLUDE =	/INCLUDE:$(SYM_PREFIX)GDALSimpleImageWarp \
/INCLUDE:$(SYM_PREFIX)GDALReprojectImage \
/INCLUDE:$(SYM_PREFIX)GDALComputeMedianCutPCT \
/INCLUDE:$(SYM_PREFIX)GDALDitherRGB2PCT \
/INCLUDE:$(SYM_PREFIX)OCTNewCoordinateTransformation

改完文件,继续执行三次编译和生成的命令,即可完成64位库的编译。