链接错误,找到了,高兴!!!散20分!

yuanzh 2009-11-06 09:58:56
昨天找错误找到十一点半,郁闷的睡了,今天上来看了一个老师的文章就明白了!
好爽呀!
关于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
...全文
71 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
benbshmily 2009-11-06
JF
回复
zdeepblue 2009-11-06
jf
回复
wanjingwei 2009-11-06
jf
回复
xiejijun_05 2009-11-06
接分
回复
yuanzh 2009-11-06
呵呵!
回复
kongbai308416350 2009-11-06
恭喜....
回复
恭喜恭喜
回复
whg01 2009-11-06
jf
回复
allograo 2009-11-06
恭喜楼主
回复
cblcz 2009-11-06
jf
回复
uosc2008 2009-11-06
这个问题我也遇到过,最讨厌
回复
相关推荐
发帖
其它技术问题
创建于2007-09-28

3849

社区成员

C/C++ 其它技术问题
申请成为版主
帖子事件
创建了帖子
2009-11-06 09:58
社区公告
暂无公告