无法解析的外部符号解决方法汇总.pdfVIP

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

⽆法解析的外部符号解决⽅法汇总

⼀、使⽤lib库

静态链接库和动态链接库都需要使⽤.lib⽂件。对于静态链接库来说,.lib⽂件包含了函数的说明和定义;⽽对于动态链接库来说,.lib⽂件只

有函数的说明,运⾏时还需要.dll⽂件。那么如何使⽤.lib⽂件呢?有三种⽅法:

第⼀种⽅法:⾸先,在VisualStudio中项⽬-属性-连接器-常规-附加库⽬录写上.lib库所在⽂件夹;其次,项⽬-属性-连接器-输

⼊-附加依赖项中写上.lib库的名称。

第⼆种⽅法:在.h或.cpp⽂件中⽤编译预处理指令#pragmacomment(lib,XXX.lib);

第三种⽅法:VisualStudio中,例如,你的解决⽅案⾥A,B两个⼯程,B⼯程⽣成.lib库共A⼯程⽤,那么就右键A⼯程引⽤-通⽤属性-

框架和引⽤-添加新引⽤选择B⼯程即可。

⼆、⽆法解析的外部符号问题

出现这个问题,不⽤怀疑,⼀定是你没有包含lib库,或者没有正确包含lib库。何谓没有正确包含?32位的项⽬不能使⽤64位的lib,反之亦

然;有时候Debug模式下⽣产的lib也不能共Release模式使⽤,反之亦然。

⾼级玩家看:

当然我刚才说的出现“⽆法解析的外部符号”就是没有正确包含lib库仍有些⽚⾯,例如,VisualStudio的⼀个解决⽅案有A、B两个⼯

程,B⽣成dll供A使⽤,A正确包含了B的dll和lib,可是有时候还是会出现B总定义的函数“⽆法解析的外部符号”问题。这个原因可能为:

B既然是要⽣成dll共A使⽤,那么B中的函数和类以及全局变量都要申明为__declspec(dllexport);⽽A中也需要申明这些函数(或类或全局

变量)为__declspec(dllimport)。以类为例,加⼊B中定义类TestB那么TestB.h应该这样:

1prename=codeclass=cpp//TestB.h

2#ifdefinePROJECT_B

3#defineDLL__declspec(dllexport)

4#else

5#defineDLL__declspec(dllimport)

6#endif

7classDLLTestB{

8//

9};

项⽬B中在属性-C++-预处理器-预处理器定义中定义PROJECT_B,这样,项⽬B就申明类TestB为__declspec(dllexprot);⽽项⽬A

包含了头⽂件TestB.h,但是没有定义预处理器宏PROJECT_B,则申明TestB为__declspec(dllimport)。

三、visualstudio诡异bug

没有使⽤其他lib库,只是⼀个.cpp⽂件使⽤另⼀个.cpp⽂件⾥定义的类函数,结果⼀直报“⽆法解析的外部符号错误”。

最后重新添加.h⽂件.cpp⽂件,把出问题的.h⽂件.cpp⽂件从项⽬中移除,并拷贝到新的.h和.cpp⽂件⾥,才解决。

2017-5-223:49:16更新“三、visualstudio诡异bug”

四、内联函数也可能导致“⽆法解析的外部符号”错误

今天重⽤别⼈的代码,总有⼏个“⽆法解析的外部符号”错误解决不了,函数都是有定义的。最后发现,只要把函数定义前的inline去掉就

好了。

2017-7-423:05:40更新

五、其它

我做⼯程时学到的⾃认为⽐较有⽤的东西:

1.VisualStudio的“查找和替换”以及“在⽂件中查找”功能,只能查找解决⽅案视图下的⽂件,如果你的.h⽂件没有包含进项⽬(即使

其它的.h或.cpp⽂件包含了这个.h),那么就不会被搜索到。

2.有时候引⽤附加库的编译预处理指令#pragmacomment(lib,XXX.lib)会放在头⽂件⾥,正如1.所说,如果包含#pragma的.h⽂件没

有添加进项⽬,就不会被搜索到。这时候,你可能觉得奇怪,明明需要使⽤B.lib,可是A⼯程的项⽬配置⾥⼜没有引⽤。原因就在这。我也

是被这个问题困扰了⼀下午,才终于搞明⽩。

3.搜索功能要学会使⽤正则表达式,例如我要搜索#pragmacomment这个指令,但不知道#pragma和comment之间有⼏个空格,怎么

办?pragma.*comment就⾏了。

文档评论(0)

领航教育 + 关注
实名认证
服务提供商

专注于中小学教案的个性定制:修改,审批等。本人已有2年教写相关工作经验,具有基本的教案定制,修改,审批等能力。可承接教案,读后感,检讨书,工作计划书等多方面的个性化服务。欢迎大家咨询^

1亿VIP精品文档

相关文档