http://blog.163.com/aiding_001/blog/static/22908192011102224344450/

某次编写一个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搞定。

转载于:https://www.cnblogs.com/gxh973121/p/3888391.html

链接报error LNK2019: unresolved external symbol错误,解决相关推荐

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

    某次编写一个COM组件,接口定义好之后,增加了ZRX代码后编译链接,出现如下错误提示,百思不得其解. error LNK2019: unresolved external symbol "p ...

  2. error LNK2019 unresolved external symbol __imp__IoDeleteDevice 错误

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

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

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

  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. error LNK2019:unresolved external symbol

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

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

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

  9. VS2010调用Matlab 2010 引擎的相关设置及问题( error LNK2019: unresolved external symbol _engOpen referenced in )

    一 相关设置:进入Property Manager                       1 点击VC++Directories                       将.\Program ...

最新文章

  1. 为什么处理有序数组比无序数组快?
  2. python列表去重_Python中对列表list去重
  3. 【linux杂谈】查看centOS系统的版本号和内核号
  4. 人月神话阅读笔记 03
  5. 利用Chrome开发者工具memory comparison分析一个时间段内的JavaScript代码内存占用率
  6. kafka自动提交offset失败:Auto offset commit failed
  7. mysql数据库中的校对集
  8. Python GIL
  9. dedeCMS解决问题:“用户资料尚未通过审核,因此空间禁止访问”?
  10. DBGrid 应用全书
  11. 伪指令 ENTRY 与 END
  12. spring报“Could not resolve placeholder”错误
  13. 探索汽车行业大数据应用
  14. ue 清理缓存_浏览器缓存数据清理
  15. DLNA使用设置教程
  16. 先锋女性与Lazada:面包与玫瑰的东南亚之旅
  17. mysql的联接算法_【MySQL—SQL编程】联接
  18. 1.2开发小程序的准备工作
  19. 你拥有的最宝贵的财富是什么?(通向财富自由学习笔记三)
  20. 烤仔说 · My DeFi Pet | 夏天到了,来玩个最in的游戏吖

热门文章

  1. 网站如何设计更符合百度seo优化_对百度搜索引擎友好的网站结构
  2. mysql 慢 机器无压力_MySQL太慢?试试这些诊断思路和工具
  3. 边玩边学,30个Python小游戏(含源码)
  4. 结合MongoDB开发LBS应用(转)
  5. 使用 Go vendor
  6. CRM客户管理软件就是软件?企典Teamface正确为您解读
  7. 冒泡排序:时间复杂度与空间复杂度
  8. iOS 各种支付密码框
  9. python怎么赋值点坐标_python女孩入门第二天_赋值 数据 字符串
  10. div +css 添加鼠标放上去显示提示文字