如果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),并保持调用的一致性。

http://msdn.microsoft.com/en-us/library/aa278396(v=vs.60).aspx /MD, /ML, /MT, /LD说明

http://msdn.microsoft.com/en-us/library/aa267384(v=vs.60).aspx 使用不同的crt应忽略哪些特定库

5,如果链接错误的是入口函数
    1,检查Linker->System->SubSystem,是win32还是console。
    2,检查Linker->Advanced->Entry Point,是否使用了自定义的入口函数。
    3,入口函数放在头文件中,但头文件没有被正确编译。

部分转载自http://blog.csdn.net/ArtsyLee

转载于:https://www.cnblogs.com/hucn/archive/2011/03/24/1994191.html

c++链接错误debug相关推荐

  1. C++ 函数模板特化导致的多重定义链接错误

    转载请注明文章:C++ 函数模板特化导致的多重定义链接错误 出处:多客博图 标题说的可能不是很清楚,解释一下,函数模板,一般都是放在头文件里面,所以有些时候,我也会做一个特化,也放在这个头文件里面,当 ...

  2. 关于vs2008上的socket链接错误问题

    昨天想用socket做一个简单的windows程序, 先拿来了以前在vc6.0上做的一小段代码, 竟然发现在vs2008上不能运行.出现了好多链接错误, 研究了好半天也没有发现是怎么回事.>下来 ...

  3. VC++的链接错误LNK2001

    VC++的链接错误LNK2001 学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过.产生连接错误的 ...

  4. MS VC6 链接错误处理

    目录(?)[+] 原帖地址:http://king-dxs.spaces.live.com/blog/cns!827cef33a5708083!178.entry 在Windows XP下编译的软件, ...

  5. C++工程编译链接错误汇总VisualStudio

    目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp [VC++目录中的包含目录] ...

  6. ASAN 检测内存错误 debug

    ASAN 检测内存错误 debug 编译时添加选项 -fsanitize=address -fno-omit-frame-pointer 或在封装器中处理-c时添加编译选项,在链接阶段添加-lasan ...

  7. 《C语言报错》链接错误LNK2001-----error LNK2001: unresolved external symbol _clrscr

    这是连接错误呀.在MSDN中查看关键字"LNK2001"看看.LNK2001错误原因有很多种,主要是函数原形错误. 1.) lib 与dll不符. 2.) h文件与lib.dll不 ...

  8. VC++的链接错误LNK2005

    VC++的链接错误LNK2005 spoons  2006-09-26 11:14:28   被这个error折磨了近一周,虽然每次出现的位置和原因都不尽相同,但都是 LIBCD.lib(crt0da ...

  9. __purecall 链接错误

    不知道诸位有没有过这样的经历:本是简单合法的 C++ 代码,但编译链接的时候却出现了如下的链接错误: > error LNK2001: 无法解析的外部符号 __purecall 在解决这个问题之 ...

  10. C++编译-链接错误集合

    1,无法解析的外部符号,链接错误,原因:没找到某个符号(变量或函数)的定义体,一般是对应函数没实现,或第三方库没有添加到工程设置中 2,重复链接链接错误,一个定义体(实现体)被多个CPPP文件包含,导 ...

最新文章

  1. 网站位置服务器,如何查看网站的服务器位置
  2. java rhino js类_让Rhino JS看Java类
  3. 【开发技术】视频URL采集
  4. 20171101从现在开始就请有计划的学习吧!
  5. 在博文顶部添加文章字数及阅读时间信息:阅读本文需要xx分钟
  6. winform代码生成器(三)
  7. 几个so经常使用Function
  8. HDU 6061 RXD and functions(NTT)
  9. ElasticSearch、Kibana Web管理
  10. 27.课时27.【Django模板】for标签使用详解(Av61533158,P27)
  11. Android之使用AlertDialog类和AlertDialog.Builder类创建带取消,确定,中立的对话框
  12. 开源云操作系统:填补技术空白 加速商业化进程
  13. SWUST OJ 190: 游程编码
  14. 消息队列MQ的基础知识
  15. 软件项目管理--软件工作量估算
  16. 大数据开发需要学习哪些编程语言
  17. 全面概述什么是人工智能?
  18. B2B的商务模式主要存在哪些缺点?
  19. python开发一个web项目得需要多少行代码_用Python写个迷你出门问问|10几行代码搞定...
  20. mysql客户端报错1366_mysql 错误提示1366 Incorrect string value怎么解决?

热门文章

  1. 解決win7打开EXE文件总是出现安全警告
  2. flex 内嵌js文件
  3. 待看内容 20160823
  4. Android之多种Bitmap效果
  5. 厉害了,Netty 轻松实现文件上传!
  6. 1次订单事故,扣了我3个月绩效!
  7. 如何拯救「大泥球」架构?人人车Android客户端架构演进实录
  8. 阿里系多个产品线宕机,包括1688、淘宝、天猫、淘宝直播、闲鱼……
  9. 十年肺腑之言:说说技术总监的“三板斧”
  10. 吐血推荐珍藏的Chrome插件