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. 菜鸟教程中Java语法(Java教程+Java面向对象)
  2. Entity Framework Core 2.0 新特性
  3. u852日期限制解决补丁_《赛博朋克》1.06补丁出炉:进一步提升主机版本稳定性...
  4. RHCE 学习笔记(16) - KickStart
  5. iOS的主要框架介绍
  6. Postman离线安装包
  7. 第1章——操作系统概论
  8. c语言实验操作期末考试怎么把试题保存,c语言上机操作练习题_相关文章专题_写写帮文库...
  9. 大数据可视化搭建存在哪些难题
  10. MySQL 入门(三)—— MySQL数据类型
  11. win10下ctfmon.exe系统程序误删的解决方案
  12. XXL任务调度平台+java实现定时任务
  13. # 技术栈知识点巩固——Js
  14. 干货:如何打造一个直播平台
  15. C语言中scanf()函数的返回值
  16. 泰坦尼克号生存分析(新手入门)
  17. java image 内存_Java BufferedImage内存消耗
  18. 低代码平台,企业服务新战场
  19. 无法卸载 LiveUpdate Notice 的问题
  20. java g722 解码_AMR音频编码器概述及文件格式分析

热门文章

  1. 第0节:地图开发那些事(PPT+视频)
  2. python初学者笔记——百度搜索关键词提取问题解决
  3. led护眼灯真的护眼吗?护眼台灯该这样选择
  4. mysql修改表名几种方式_Oracle数据库中修改表名的几种方式
  5. c#取小数点后三位_VB.NetC#-取小数点后几位但不四舍五入的方法
  6. 命令行操纵oracle数据库大全
  7. JS 打开新窗口的方法
  8. js map满足条件跳出循环_js.es5 map循环一大坑:循环遍历竟然出现逗号!
  9. cms php vue 开源_vue_cms
  10. 关于Unity3D动态生成连续性网格几何体总结【第三部分】(贴图篇)