“符号未定义”链接错误在Visual Unit 4中怎么解决?

如题所述

原因一:未链接静态库或动态库

一般来说,产品项目链接的静态库,测试工程也要链接,方法是从产品工程的setting中,拷贝需要链接的库列表到工程属性->链接->链接以下库。库名之间用,分隔。产品工程setting中库列表的位置:
VC6.0: Project -> Settings,点击“Link”标签,“Category”下拉列表选择“Input”,“Object/library modules”输入框中即为库列表;
VC2003及以上版本:项目 -> 属性,左边树形控件中选择 配置属性->链接器->输入,“附加依赖项”输入框中即为库列表;
CodeBlocks:Project -> Build options,“Linker settings”中的内容中即为库列表。
另外,凡是设为“L”的头文件(可在“工程属性”的“头文件”页,点击“详细分类”,打开“头文件分类”对话框查看),VU都不会自动生成桩,测试工程需链接相应的静态库(.Lib)或动态库(.Dll)。动态库通常由代码完成链接,不需要设置,静态库则需手工添加。如果仍有部分库函数链接错误,请查看文档(如MSDN),找出这些库函数所在的lib并加入。
原因二:桩代码遗漏
偶尔会因桩代码遗漏造成“符号未定义”链接错误,可以用“桩代码管理器”补齐桩代码。VU不会为未声明的函数或只在函数体内声明的函数生成桩,应尽量在函数体外声明。请参考桩代码管理器。常规方法不能解决的符号未定义链接错误

以下错误比较少见:
1、使用桩代码管理器生成的桩代码产生编译错误:从链接错误中拷贝的函数声明有可能生成错误的桩函数声明,可找出原始声明替换。
2、提示“符号未定义”,但添加桩代码后却提示“函数已有函数体”:通常是导出类的内联函数产生此类问题,目前无法直接解决,可将产生错误的源文件移除,如 CCHelper.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall CThread::Stop(void),可将CChelper.cpp移除。方法是:1)在工程属性中将产生错误的源文件设为X;2)从代码菜单执行“刷新桩代码”。

3、导出类的静态成员产生“符号未定义”错误,添加桩代码后又产生编译错误,此问题目前无法直接解决,可按2的方法将产生错误的源文件移除。如:CJDockBar.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static struct AFX_MSGMAP const CDockBar::messageMap,可将CJDockBar.cpp移除。

4、使用桩代码管理器生成桩代码失败:可在__Customize.c/cpp文件中自行编写桩代码。
温馨提示:答案为网友推荐,仅供参考
相似回答