error LNK2005: already defined in libcmt.lib 分类:转帖 | 标签: error LNK2005 2010-10-21 10:01 阅读(3494)
2015-12-09 09:34
211 查看
error LNK2005: already defined in libcmt.lib
这个错误是微软设计错误,因此如果遇到这个错误,我们只能躲过这个链接错误。具体的办法就是将那个提示出错的库放到另外一个库的前面。另外选择不同的C函 数库,可能会引起这个错误。MS, C有两种C函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。另外一种是支持多线程 的:msvcrt.lib。如果一个工程里,这两种函数库混合使用,可能会引起这个错误。因此建议使用支持多线程的msvcrt.lib。需要注意的是,当使用其他的库的时候最容易产生这种错误,例如boost和wxWindow使用/MD来编译的,也就是使用支持多线程的C函数库。这时候 如果自己的程序没有指明/MD的话,就会提示两种C函数冲突,并且还有LNK2005错误。因此如果使用boost,wxWindow的话,需要指明 /MD。
msvcrt.lib是VC中的Multithreaded DLL 版本的C运行时库,而libcmt.lib是Multithreaded的运行时 库。在同一个项目中,所有的源文件必须链接相同的C运行时库。如果某一文件用了Multithreaded DLL版本,而其他文件用了Single- Threaded或者Multithreaded版本的库,也就是说用了不同的库,就会导致这个警告的出现。
VC中的C运行时库一共有6种
Single-threaded (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded using DLL (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Debug Single-threaded (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
Debug Multithreaded (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
Debug Multithreaded using DLL (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib
这个在C++ ->Code Generation-->runtime library 中设置,实际上和静态dll和动态dll有关
解决办法:
Project Settings:
-> Configration Properties -> Linker -> Input -> Ignore Specific Library: libcmtd
libcmtd 这个库有时候不能忽略,忽略后会有不能解析的外部符号错误
其实有个方便的方法 链接时加入参数 /FORCE:MULTIPLE
相关文章推荐
- 学习 PipedInputStream PipedOutputStream
- Path Sum
- C#中string类型前加@标志的作用
- 夺命雷公狗---javascript NO:07 事件编程介绍
- OpenCL
- ImageSlider使用体会
- VS2012编译luabind
- qemu-system-x86_64: drive with bus=0, unit=0 (index=0) exists 错误原因
- Bresenham算法
- 性能优化-转载篇
- 自定义鼠标选中样式
- 夺命雷公狗---javascript NO:06 数组定义和遍历
- js获取鼠标位置实例详解
- 分享几篇有关react-native的博客
- Percona Toolkit包安装
- PE总结9 --PE文件结构之 解析导出表
- 【java基础】java反射机制
- 黑马程序员——C语言——typedef和#define
- android 6.0 adb 编译
- Android开发调节屏幕亮度