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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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


目录
相关文章
|
18天前
|
存储 并行计算 算法
深入解析Java并发库(JUC)中的Phaser:原理、应用与源码分析
深入解析Java并发库(JUC)中的Phaser:原理、应用与源码分析
|
19天前
|
Java 数据库连接
提升编程效率的利器: 解析Google Guava库之IO工具类(九)
提升编程效率的利器: 解析Google Guava库之IO工具类(九)
|
2天前
|
存储 SQL Python
`urllib.parse`模块是Python标准库`urllib`中的一个子模块,它提供了处理URL(统一资源定位符)的实用功能。这些功能包括解析URL、组合URL、转义URL中的特殊字符等。
`urllib.parse`模块是Python标准库`urllib`中的一个子模块,它提供了处理URL(统一资源定位符)的实用功能。这些功能包括解析URL、组合URL、转义URL中的特殊字符等。
6 0
|
10天前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
|
16天前
|
Linux 数据处理
探索Linux下的readlink命令:解析符号链接的利器
`readlink`命令在Linux中用于揭示符号链接的指向,显示它们所链接的实际文件或目录的路径。它可以显示简洁的绝对路径(-f),处理循环链接(-e),或不加换行符输出(-n)。例如,查看`link.txt`指向:`readlink link.txt`;获取绝对路径:`readlink -f link.txt`。使用时要注意链接是否存在、权限问题和可能的循环链接。
|
17天前
|
存储 安全 Java
Java泛型:深度解析编译时类型安全的核心机制
【6月更文挑战第28天】Java泛型自JDK 1.5起增强了代码安全与复用。它们允许类、接口和方法使用类型参数,如`<T>`在`Box<T>`中。泛型确保编译时类型安全,例如`List<String>`防止了运行时ClassCastException。尽管运行时存在类型擦除,编译时检查仍保障安全。理解泛型核心机制对于优化Java编程至关重要。
|
19天前
|
算法 Java 容器
深入解析Java并发库(JUC)中的LongAdder
深入解析Java并发库(JUC)中的LongAdder
|
19天前
|
缓存 Java Maven
深入解析Google Guava库与Spring Retry重试框架
深入解析Google Guava库与Spring Retry重试框架
|
19天前
|
监控 安全 算法
提升编程效率的利器: 解析Google Guava库之RateLimiter优雅限流(十)
提升编程效率的利器: 解析Google Guava库之RateLimiter优雅限流(十)
|
19天前
|
域名解析 网络协议 程序员
程序员必知:【转】adns解析库——域名解析实例(C++、linux)
程序员必知:【转】adns解析库——域名解析实例(C++、linux)
22 0

推荐镜像

更多