链接错误,找到了,高兴!!!散20分!
昨天找错误找到十一点半,郁闷的睡了,今天上来看了一个老师的文章就明白了!
好爽呀!
关于RTTI的,连接错误
顺便把这篇文章贴下,希望大家以后都不要犯了!这种错误很难找的:
C++链接错误总结
如果C++程序在链接时,不能在所有的库和目标文件内找到所引用的函数、变量或标识符,将产生此错误。一般来说,发生错误的原因是所引用的函数、变量不存在、拼写不正确或者使用错误。下面,我以工程内链接和连接库链接两种方式讨论错误出现的原因和解决错误的方法。
一,工程内链接
1,工程内函数或变量不存在
1,只声明没定义。
2,声明和定义的函数参数列表不一致。
3,函数或变量拼写错误。
2,函数或变量所在的文件没有被正确编译
1,所在的文件没有被添加到工程中。
2,函数或变量的定义放在头文件,但是该头文件并没有被任何一个cpp文件引用,注意:这种情况只会出现入口函数的链接错误。
4,预处理宏或条件编译导致函数或变量没有被正确编译。(注:我的就是这条原因)
5,如果是内联(inline)函数,必须在需要用它的每个编译单位里定义,因此定义只能放在头文件中,不可以放在CPP文件中。
二,连接库链接
1,链接的函数或变量没有被正确导出
1,类或函数没有用__declspec(dllexport)导出。
2,类或函数没有用模块定义文件def导出。
3,def文件没有被正确添加到工程中。
4,函数或变量的拼写错误导致没法正确导出。
2,找不到链接的库文件
1,工程设置中Linker->General->Additional Library Directories.
2,工程设置中Linker->Input->Additional Dependencies.
3,Tools->Options->Projects->VC++ Directories->Library files.
4,使用pragma comment(lib, "XXX.lib")
5,如果没有设置库文件和路径,可以通过设置工程依赖解决。
3,错误的调用方式
1,C和C++函数名扩展没有被正确使用(C一般为_function形式,C++一般为: ?function@@YAPAU形式)。
2,extern "C"的使用不正确。
3,函数参数调用方式不一致(__cdecl、 __stdcall、 __fastcall……)。
4,如果链接错误的是CRT库
1,试试忽略该CRT库。
2,改变运行时库(Runtime Library)链接方式,使用DLL或者静态库方式。
3,如果忽略了某CRT库,检查运行时库(Runtime Library),并保持调用的一致性。
5,如果链接错误的是入口函数
1,检查Linker->System->SubSystem,是win32还是console。
2,检查Linker->Advanced->Entry Point,是否使用了自定义的入口函数。
3,入口函数放在头文件中,但头文件没有被正确编译。
6,其它可能的情况
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ArtsyLee/archive/2008/08/05/2772760.aspx
好爽呀!
关于RTTI的,连接错误
顺便把这篇文章贴下,希望大家以后都不要犯了!这种错误很难找的:
C++链接错误总结
如果C++程序在链接时,不能在所有的库和目标文件内找到所引用的函数、变量或标识符,将产生此错误。一般来说,发生错误的原因是所引用的函数、变量不存在、拼写不正确或者使用错误。下面,我以工程内链接和连接库链接两种方式讨论错误出现的原因和解决错误的方法。
一,工程内链接
1,工程内函数或变量不存在
1,只声明没定义。
2,声明和定义的函数参数列表不一致。
3,函数或变量拼写错误。
2,函数或变量所在的文件没有被正确编译
1,所在的文件没有被添加到工程中。
2,函数或变量的定义放在头文件,但是该头文件并没有被任何一个cpp文件引用,注意:这种情况只会出现入口函数的链接错误。
4,预处理宏或条件编译导致函数或变量没有被正确编译。(注:我的就是这条原因)
5,如果是内联(inline)函数,必须在需要用它的每个编译单位里定义,因此定义只能放在头文件中,不可以放在CPP文件中。
二,连接库链接
1,链接的函数或变量没有被正确导出
1,类或函数没有用__declspec(dllexport)导出。
2,类或函数没有用模块定义文件def导出。
3,def文件没有被正确添加到工程中。
4,函数或变量的拼写错误导致没法正确导出。
2,找不到链接的库文件
1,工程设置中Linker->General->Additional Library Directories.
2,工程设置中Linker->Input->Additional Dependencies.
3,Tools->Options->Projects->VC++ Directories->Library files.
4,使用pragma comment(lib, "XXX.lib")
5,如果没有设置库文件和路径,可以通过设置工程依赖解决。
3,错误的调用方式
1,C和C++函数名扩展没有被正确使用(C一般为_function形式,C++一般为: ?function@@YAPAU形式)。
2,extern "C"的使用不正确。
3,函数参数调用方式不一致(__cdecl、 __stdcall、 __fastcall……)。
4,如果链接错误的是CRT库
1,试试忽略该CRT库。
2,改变运行时库(Runtime Library)链接方式,使用DLL或者静态库方式。
3,如果忽略了某CRT库,检查运行时库(Runtime Library),并保持调用的一致性。
5,如果链接错误的是入口函数
1,检查Linker->System->SubSystem,是win32还是console。
2,检查Linker->Advanced->Entry Point,是否使用了自定义的入口函数。
3,入口函数放在头文件中,但头文件没有被正确编译。
6,其它可能的情况
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ArtsyLee/archive/2008/08/05/2772760.aspx
...全文
相关推荐
升腾c33原厂bois!!!有错误的
升腾c33原厂bois!!!有错误的!哪位大神可以修复一下
链接错误LNK2001
链接错误 LNK2001链接错误 LNK2001 是一种常见的错误,在编程中尤其是在学习 VC++ 时经常会遇到。
3Dmax许可文件错误20补丁
下载提供的“max许可文件错误20补丁”压缩包,并确保电脑已连接到稳定的网络环境。2. 使用解压缩工具(如WinRAR或7-Zip)打开压缩包,找到里面的补丁文件。3.
20个漂亮大气的404错误页面-优化404错误页面
这可能是由于URL输入错误、页面被移除或链接失效导致。2. **用户体验**:一个设计得体的404页面可以减轻用户的挫败感,通过提供友好的提示信息和导航选项,帮助他们找到所需内容。3.
链接器错误,CString,ATL,MFC和您!
当你的项目中存在多个源文件,而这些文件之间有未正确声明或包含的头文件时,链接器可能无法找到相应的函数实现,导致错误。


其它技术问题

