error LNK2019: unresolved external symbol错误,解决
来源:互联网 发布:杀虫剂毒性 知乎 编辑:程序博客网 时间:2024/06/05 02:35
某次编写一个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错误,解决
- error LNK2019: unresolved external symbol __imp_SetupDiDestroyDeviceInfoList 错误解决
- error LNK2019: unresolved external symbol _IID_IMPEG2PIDMap连接错误的解决
- error LNK2019: unresolved external symbol 错误处理
- 关于error LNK2019: unresolved external symbol错误
- error LNK2019: unresolved external symbol错误 (ICU4C)
- 关于error LNK2019: unresolved external symbol错误
- 解决Error LNK2019: unresolved external symbol
- Error LNK2019: unresolved external symbol
- error LNK2019: unresolved external symbol
- error LNK2019: unresolved external symbol
- error LNK2019: unresolved external symbol
- error LNK2019: unresolved external symbol
- error LNK2019: unresolved external symbol
- Error LNK2019: unresolved external symbol
- error LNK2019:unresolved external symbol
- error LNK2019: unresolved external symbol
- error LNK2019:unresolved external symbol
- 23个开源App的App Store地址和源代码
- 《生活365》技术领先、专利致胜—解构真正高品质网站开发
- Myeclipse——Spring 从入门到精通二 依赖注入
- SQL语句_行转列
- The operation couldn't be completed.(Cocoa error 256)
- error LNK2019: unresolved external symbol错误,解决
- 关于OpenCV2.4.0以后版本不能运行SURF和SIFT的问题
- 红八月自由软件理想盛会--第二届CSDN南昌俱乐部聚会倡议
- 多重网格、自适应网格和无网格
- bing Maps学习笔记(一)地区支持
- Ubuntu 12.04 常用的快捷键
- 商务通话容易忽视的细节
- 自由的追求—写给新农网和他的创业者们
- HDU1005矩阵相乘二分法