当前位置:  开发笔记 > 编程语言 > 正文

调试链接错误的最佳实践

如何解决《调试链接错误的最佳实践》经验,为你挑选了1个好方法。

在使用C++构建项目时,我发现调试链接错误很棘手,尤其是在获取其他人的代码时.人们使用什么策略来调试和修复链接错误?



1> Joe Schneide..:

不确定您的专业水平是什么,但这是基础知识.

下面是来自VS 2005的链接器错误 - 是的,如果你不熟悉它,这是一个巨大的混乱.

ByteComparator.obj : error LNK2019: unresolved external symbol "int __cdecl does_not_exist(void)" (?does_not_exist@@YAHXZ) referenced in function "void __cdecl TextScan(struct FileTextStats &,char const *,char const *,bool,bool,__int64)" (?TextScan@@YAXAAUFileTextStats@@PBD1_N2_J@Z)

有几点需要关注:

"ByteComparator.obj" - 查找ByteComparator.cpp文件,这是链接器问题的根源

"int __cdecl does_not_exist(void)" - 这是它找不到的符号,在本例中是一个名为does_not_exist()的函数

此时,在许多情况下,最快的解决方法是搜索此函数的代码库并找到实现的位置.一旦你知道函数的实现位置,你就必须确保将两个地方链接在一起.

如果您使用的是VS2005,则可以使用"Project Dependencies ..."右键菜单.如果您正在使用gcc,那么您可以在makefile中查找可执行文件生成步骤(使用一堆.o文件调用gcc)并添加缺少的.o文件.


在第二种情况下,您可能缺少"外部"依赖项,而您没有代码.Win32库通常在您必须链接到的静态库中实现.在这种情况下,请转到MSDN或"Microsoft Google"并搜索API.在API描述的底部,给出了库名.将其添加到项目属性"Configuration Properties-> Linker-> Input-> Additional Dependencies"列表中.例如,MSDN上的 timeGetTime()函数页面告诉您使用页面底部的Winmm.lib.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有