error LNK2019: unresolved external symbol错误,解决

2024-02-29 18:18

本文主要是介绍error LNK2019: unresolved external symbol错误,解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

某次编写一个COM组件,接口定义好之后,增加了ZRX代码后编译链接,出现如下错误提示,百思不得其解。
error LNK2019: unresolved external symbol "public: enum Zcad::ErrorStatus __thiscall ZcDbDatabase::readDwgFile(char const *,int,bool,wchar_t const *)" (?readDwgFile@ZcDbDatabase@@QAE?AW4ErrorStatus@Zcad@@PBDH_NPB_W@Z) referenced in function "public: __thiscall ZwPdmAppSvr::ZwPdmAppSvr(char const *,bool)" (??0ZwPdmAppSvr@@QAE@PBD_N@Z)

寻遍百度谷歌大体的答案也就是库未包含或者配置不一致(其实这个问题根本上也是配置与ZRX库的配置不一致造成的)。但是肯定不是库包含的问题,因为其他的接口调用正常,唯独这个接口报链接错误。
如何定位是那个配置项呢?网上没有直接的答案,只好自己动手。
想来想去,应该还是连接器无法再lib中找到调用的函数,那么不如看看调用的函数在SDK中的声明:
Zcad::ErrorStatus readDwgFile(const ZCHAR* fileName, const int shmode = _SH_DENYWR, bool bAllowCPConversion = false, const wchar_t* wszPassword = NULL);
的确有这个函数的声明,那问题在哪里呢?
无奈之下看到了这个函数的修饰名:
?readDwgFile@ZcDbDatabase@@QAE?AW4ErrorStatus@Zcad@@PBDH_NPB_W@Z
不如到ZRX.dll中去找找看有没有这个导出函数。用DEPENDS.EXE打开ZRX.dll,将所有导出函数拷贝到记事本中,然后查找?readDwgFile@ZcDbDatabase@@QAE?AW4ErrorStatus@Zcad@@PBDH_NPB_W@Z,居然真的找不到这个函数(不可能啊)。然后查找一下相似的函数,发现有一个函数与这个函数非常之相似?readDwgFile@ZcDbDatabase@@QAE?AW4ErrorStatus@Zcad@@PBDH_NPBG@Z。
会不会就是这个函数呢?
用undname.exe还原一下这两个函数的声明试试。
C:\Program Files\Microsoft Visual Studio 9.0\VC>undname.exe ?readDwgFile@ZcDbDatabas
e@@QAE?AW4ErrorStatus@Zcad@@PBDH_NPBG@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.

Undecoration of :- "?readDwgFile@ZcDbDatabase@@QAE?AW4ErrorStatus@Zcad@@PBDH_NPB
G@Z"
is :- "public: enum Zcad::ErrorStatus __thiscall ZcDbDatabase::readDwgFile(char
const *,int,bool,unsigned short const *)"


C:\Program Files\Microsoft Visual Studio 9.0\VC>undname.exe ?readDwgFile@ZcDbDatabas
e@@QAE?AW4ErrorStatus@Zcad@@PBDH_NPB_W@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.

Undecoration of :- "?readDwgFile@ZcDbDatabase@@QAE?AW4ErrorStatus@Zcad@@PBDH_NPB
_W@Z"
is :- "public: enum Zcad::ErrorStatus __thiscall ZcDbDatabase::readDwgFile(char
const *,int,bool,wchar_t const *)"

细心的朋友一定已经发现,这两个函数其实就是同一个函数,差别就在最后一个参数上。这是由于编译器选项的不同导致连接器认为这两个函数不同。ZRX.dll中将wchar_t认为是自定义类型,编译后自动将其转换为unsigned short;
而我的工程中wchar_t设置为内置类型,按照这个类型得到的函数修饰名自然就与ZRX.lib中的函数名不同了,当然也就无法链接这个函数了。

真相终于大白,迅速打开工程设置,C/C++>Language将Treat wchar_t as Built-in Type设置为No (/Zc:wchar_t-)。
重新编译工程,链接通过,OK搞定。

这篇关于error LNK2019: unresolved external symbol错误,解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/759631

相关文章

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

解决Entity Framework中自增主键的问题

《解决EntityFramework中自增主键的问题》:本文主要介绍解决EntityFramework中自增主键的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Entity Framework中自增主键问题解决办法1解决办法2解决办法3总结Entity Fram

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。