某次编写一个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错误,解决相关推荐

  1. 链接报error LNK2019: unresolved external symbol错误,解决

    http://blog.163.com/aiding_001/blog/static/22908192011102224344450/ 某次编写一个COM组件,接口定义好之后,增加了ZRX代码后编译链 ...

  2. error LNK2019: unresolved external symbol _IID_IMPEG2PIDMap连接错误的解决

    以前的项目都是在xp(x86)上面编译的,vs2005+dshow9.0 现在要把项目升级到win7(x64)上面,用vs2005+最新的Windows SDK(里面包含最新的dshow),下载地址: ...

  3. error LNK2019 unresolved external symbol __imp__IoDeleteDevice 错误

    LNK2019 unresolved external symbol __imp__IoDeleteDevice 错误 使用ddk时链接出错信息: sioctl.obj : error LNK2019 ...

  4. error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

    VS2013新建一个空的win32应用程序时 出现了链接错误 1>------ Build started: Project: AutoUpdate, Configuration: Debug ...

  5. C++ Error: error LNK2019: unresolved external symbol

    在某工程中新添加了文件x.cu与x.hpp,实现了一些功能,最后编译整个工程的时候就出现了这个问题: error LNK2019: unresolved external symbol 这是链接错误, ...

  6. error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

    编译一段程序时,出现连接器错误: error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTS ...

  7. QT MSVC 编译器添加新类报错LNK2019 error LNK2019: unresolved external symbol public

    有点小郁闷.qt下代码本来是用的mingw 编译的,现在因为一些原因,需要改成用msvc 编译器编译,然后遇到一个奇怪的问题,具体就是我在添加一个新类的时候,总是提示无法解析的符号被引用.找了好久的原 ...

  8. error LNK2019:unresolved external symbol

    error LNK2019:unresolved external symbol 出现错误,一般情况下是指程序不认识函数.具体的说就是.h文件中定义并没有实现,这就是库出现了问题. 遇到这个问题,第一 ...

  9. error LNK2019: unresolved external symbol “__declspec(dllimport) public: __thiscall 的解决方案

    error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall 的解决方案 参考文章: ...

最新文章

  1. java 验签_JAVA验签方式转换为PHP代码,求教怎么写
  2. Tableau系列之使用日期
  3. java影院购票系统开题报告,开题报告-网上电影院购票系统的设计与实现.doc
  4. BZOJ-1922 大陆争霸 多限制、分层图最短路 (堆+dijkstra)
  5. Mybatis的数据库连接池
  6. ios 画带有箭头的线_ios纯色箭头与渐变色箭头的实现
  7. 学习笔记之七_第2层交换和生成树协议(STP)(CCNA知识考点)
  8. 算法(0)—— 打造一个C开发库
  9. Spring源码之bean的属性填充populateBean方法解读
  10. clearcase、Git之我见
  11. 多款免费可商用的微信小程序开源源码推荐(商城类)
  12. Java阶段三:基础项目—家庭记录收支程序
  13. Android手机avi转换为mp4手机,avi转mp4怎么进行 avi转mp4方法介绍【图解】
  14. node.js中模块化开发(Gulp4)
  15. html+css+js按键定位搜索框
  16. Qt(c++)调用python一直报错slot、hypot等
  17. zabbix结合qqmail发送告警信息
  18. 同事说聊天没有表情,我在内网搭了一个表情包网站
  19. 使用S7.net读取西门子1500PLC
  20. php .p8推送,PHPCMS实现自动推送URL到百度站长平台

热门文章

  1. linux系统LVM磁盘扩容
  2. Oracle +JDBC
  3. 计算机二级c语言学后感,计算机等级考试心得体会
  4. TensorFlow之二—学习率 (learning rate)
  5. L1 / L2 正规化 (Regularization)
  6. 微信小程序(4)进阶
  7. 软件国产化适配的研发计划
  8. 面向对象的程序设计的好处
  9. 华为在欧洲启动2023年高校挑战赛(Tech Arena)
  10. 记录一次nginx配置php-fpm 404