VS2022编译GDAL库报错: LINK : error LNK2001: 无法解析的外部符号 _OSRValidate _OGR_G_GetPointCount _OGRRegisterAll


场景复现

使用VS2022的Native Tools command prompt for 2022工具编译GDAL库时,报“ LINK : error LNK2001: 无法解析的外部符号 _OSRValidate _OGR_G_GetPointCount _OGRRegisterAll ....”错误 。该问题可能是由处理未修饰符号的AMD64 vc++编译器的更改引起的。
在这里插入图片描述

LINK : error LNK2001: 无法解析的外部符号 _OSRValidate
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
gdal303.dll : fatal error LNK1120: 8 个无法解析的外部命令
NMAKE : fatal error U1077: ““D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\link.EXE””: 返回代码“0x460”
Stop.

解决方案

打开nmake.opt文件,找到SYM_PREFIX的定义。然后将SYM_PREFIX = _更改为SYM_PREFIX =
在这里插入图片描述
打开makefile.vc文件,找到BASE_INCLUDE的第一个定义
替换规则:用$(SYM_PREFIX)替换’_',然后删除@以及后面的数字
原始代码:

BASE_INCLUDE = /INCLUDE:_GDALSimpleImageWarp@36 \
/INCLUDE:_GDALReprojectImage@48 \
/INCLUDE:_GDALComputeMedianCutPCT@32 \
/INCLUDE:_GDALDitherRGB2PCT@28 \
/INCLUDE:_OCTNewCoordinateTransformation@8
!ELSE
BASE_INCLUDE = /INCLUDE:$(SYM_PREFIX)GDALSimpleImageWarp \
/INCLUDE:$(SYM_PREFIX)GDALReprojectImage \
/INCLUDE:$(SYM_PREFIX)GDALComputeMedianCutPCT \
/INCLUDE:$(SYM_PREFIX)GDALDitherRGB2PCT \
/INCLUDE:$(SYM_PREFIX)OCTNewCoordinateTransformation
!ENDIF

修改后的代码:

BASE_INCLUDE = /INCLUDE:$(SYM_PREFIX)GDALSimpleImageWarp \
/INCLUDE:$(SYM_PREFIX)GDALReprojectImage \
/INCLUDE:$(SYM_PREFIX)GDALComputeMedianCutPCT \
/INCLUDE:$(SYM_PREFIX)GDALDitherRGB2PCT \
/INCLUDE:$(SYM_PREFIX)OCTNewCoordinateTransformation
!ELSE
BASE_INCLUDE = /INCLUDE:$(SYM_PREFIX)GDALSimpleImageWarp \
/INCLUDE:$(SYM_PREFIX)GDALReprojectImage \
/INCLUDE:$(SYM_PREFIX)GDALComputeMedianCutPCT \
/INCLUDE:$(SYM_PREFIX)GDALDitherRGB2PCT \
/INCLUDE:$(SYM_PREFIX)OCTNewCoordinateTransformation
!ENDIF

对比图
在这里插入图片描述

修改完成后,再次执行命令,编译GDAL库。
release版本输入

nmake /f makefile.vc
nmake /f makefile.vc devinstall

debug版输入

nmake /f makefile.vc DEBUG=1
nmake /f makefile.vc devinstall

猜你喜欢

转载自blog.csdn.net/qq_45254369/article/details/128489034
今日推荐