vs2010 error LNK2005
2015-08-24 16:26
141 查看
在编程中我们常常会遇到error LNK2005的错误:这常常是初级程序员经常犯得错误即重复定义。
主要存在下边几种情况:
1)重复定义全局变量
2)头文件包含重复
3)使用第三方库(很少)
1)重复定义全局变量
在本cpp文件中定义一个变量int a;在使用的时候一定要extern int a;这时候一定要只是声明,不要初始化。
解决方案:
1.声明必须使用extern
2.不要初始化
2)头文件包含重复
如果使用宏的话,一定要使用#define ....#endif关键字
或者在cpp文件头部声明#pragma once
文件中的变量与函数一定要是static!!!!要不然也会报错!
3)使用第三方库
本人没有遇到过这种情况,还是照搬前人的经验吧
使用第三方的库造成的。这种情况主要是C运行期函数库和MFC的库冲突造成的。具体的办法就是将那个提示出错的库放到另外一个库的前面。另外选择不同的C函数库,可能会引起这个错误。微软和C有两种C运行期函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。另外一种是支持多线程的:msvcrt.lib。如果一个工程里,这两种函数库混合使用,可能会引起这个错误,一般情况下它需要MFC的库先于C运行期函数库被链接,因此建议使用支持多线程的msvcrt.lib。所以在使用第三方的库之前首先要知道它链接的是什么库,否则就可能造成LNK2005错误。如果不得不使用第三方的库,可以尝试按下面所说的方法修改,但不能保证一定能解决问题,前两种方法是微软提供的:
A、选择VC菜单Project->Settings->Link->Catagory选择Input,再在Ignore libraries 的Edit栏中填入你需要忽略的库,如:Nafxcwd.lib;Libcmtd.lib。然后在Object/library Modules的Edit栏中填入正确的库的顺序,这里需要你能确定什么是正确的顺序,呵呵,God bless you!
B、选择VC菜单Project->Settings->Link页,然后在Project Options的Edit栏中输入/verbose:lib,这样就可以在编译链接程序过程中在输出窗口看到链接的顺序了。
C、选择VC菜单Project->Settings->C/C++页,Catagory选择Code Generation后再在User Runtime libraray中选择MultiThread DLL等其他库,逐一尝试。
比较实用的两种
程序员的编程的过程就是一个发现问题,解决问题并总结的过程
主要存在下边几种情况:
1)重复定义全局变量
2)头文件包含重复
3)使用第三方库(很少)
1)重复定义全局变量
在本cpp文件中定义一个变量int a;在使用的时候一定要extern int a;这时候一定要只是声明,不要初始化。
解决方案:
1.声明必须使用extern
2.不要初始化
2)头文件包含重复
如果使用宏的话,一定要使用#define ....#endif关键字
或者在cpp文件头部声明#pragma once
文件中的变量与函数一定要是static!!!!要不然也会报错!
3)使用第三方库
本人没有遇到过这种情况,还是照搬前人的经验吧
使用第三方的库造成的。这种情况主要是C运行期函数库和MFC的库冲突造成的。具体的办法就是将那个提示出错的库放到另外一个库的前面。另外选择不同的C函数库,可能会引起这个错误。微软和C有两种C运行期函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。另外一种是支持多线程的:msvcrt.lib。如果一个工程里,这两种函数库混合使用,可能会引起这个错误,一般情况下它需要MFC的库先于C运行期函数库被链接,因此建议使用支持多线程的msvcrt.lib。所以在使用第三方的库之前首先要知道它链接的是什么库,否则就可能造成LNK2005错误。如果不得不使用第三方的库,可以尝试按下面所说的方法修改,但不能保证一定能解决问题,前两种方法是微软提供的:
A、选择VC菜单Project->Settings->Link->Catagory选择Input,再在Ignore libraries 的Edit栏中填入你需要忽略的库,如:Nafxcwd.lib;Libcmtd.lib。然后在Object/library Modules的Edit栏中填入正确的库的顺序,这里需要你能确定什么是正确的顺序,呵呵,God bless you!
B、选择VC菜单Project->Settings->Link页,然后在Project Options的Edit栏中输入/verbose:lib,这样就可以在编译链接程序过程中在输出窗口看到链接的顺序了。
C、选择VC菜单Project->Settings->C/C++页,Catagory选择Code Generation后再在User Runtime libraray中选择MultiThread DLL等其他库,逐一尝试。
比较实用的两种
解决方案一: 把主函数所包含的操作函数.cpp,改为头文件.h,然后就可以解决如上错误。 解决方案二: 重新打开编译器,重新打开刚才的文件,先打开主函数.cpp,然后编译运行,打开Fileview,其中有一个external dependencies,把头文件.h,和操作函数.cpp添加到这里,这样再编译运行主函数.cpp,程序运行成功! 解决方案一: 把主函数所包含的操作函数.cpp,改为头文件.h,然后就可以解决如上错误。 解决方案二: 重新打开编译器,重新打开刚才的文件,先打开主函数.cpp,然后编译运行,打开Fileview,其中有一个external dependencies,把头文件.h,和操作函数.cpp添加到这里,这样再编译运行主函数.cpp,程序运行成功!
程序员的编程的过程就是一个发现问题,解决问题并总结的过程
相关文章推荐
- js汉字转拼音的方法
- 安装程序检测到 HTML 帮助数据文件已损坏,无法继续进行
- 黑马程序员-------Java笔记--------多线程基础练习2题
- mysql 读写分离
- __attribute__((weak, alias())))
- Android的NDK开发(5)————Android JNI层实现文件的read、write与seek操作
- HDU 1865
- 选择合适加密软件的6大要素
- test
- Android的NDK开发(4)————JNI数据结构之JNINativeMethod
- 华为上机试题1(删除字符串中出现次数最少的字符)
- 通过OpenSSL获取证书扩展属性之一:“基本约束”
- SetEvent/ResetEvent
- 获取视频帧图片
- 剑指offer面试题20-顺时针打印矩阵
- Cocos2d-X 使用CCTableView创建滚动视图
- DELL 服务器报CPU 1 has an internal error (IERR)
- 获取视频帧图片
- AIX配置时间服务器(NTP)
- js日期格式化