首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

又是LNK2005,小弟我无语了,们哪位高手来帮帮忙啊

2012-02-22 
又是LNK2005,我无语了,大虾们谁来帮帮忙啊!VC++2008下,Debug下,共享DLL下使用MFC,编译通过。我想在没安VC的

又是LNK2005,我无语了,大虾们谁来帮帮忙啊!
VC++2008下,Debug下,共享DLL下使用MFC,编译通过。
我想在没安VC的机器上跑程序,就不能用Debug,于是就改换成Release。
设置:1)Release 2)在静态库中使用MFC 3)多线程(MT)
但不通过,错误如下:
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _free 已经在 libcmt.lib(free.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __strnicmp 已经在 libcmt.lib(strnicmp.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _malloc 已经在 libcmt.lib(malloc.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _realloc 已经在 libcmt.lib(realloc.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _atoi 已经在 libcmt.lib(atox.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _sprintf 已经在 libcmt.lib(sprintf.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __localtime64_s 已经在 libcmt.lib(loctim64.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _fwrite 已经在 libcmt.lib(fwrite.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _fclose 已经在 libcmt.lib(fclose.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _fflush 已经在 libcmt.lib(fflush.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _fread 已经在 libcmt.lib(fread.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _ferror 已经在 libcmt.lib(feoferr.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _feof 已经在 libcmt.lib(feoferr.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __errno 已经在 libcmt.lib(dosmap.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __fileno 已经在 libcmt.lib(fileno.obj) 中定义
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 libcmt.lib(typinfo.obj) 中定义
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 libcmt.lib(typinfo.obj) 中定义
1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>D:\pbjacob\UnderGraduate\program\复件 addP3\rbt\Release\rbt.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
1>生成日志保存在“file://d:\pbjacob\UnderGraduate\program\复件 addP3\rbt\rbt\Release\BuildLog.htm”
1>rbt - 18 个错误,1 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

如果按网上的一些说法,保留libcmt.lib,忽略一些对应库的话,又会出新问题,说xsens.lib LNK2001,未解析的外部符号
其中xsens.lib是我自己的东西,我绝对已经添加上这个库了,而且debug下没问题来着。

该怎么解决啊?或者说,如果有什么更好的方法,能在未装VC2008的机器上跑我的程序也行啊

[解决办法]
重建个工程,然后把你的头文件,源文件再导进去。
重编译试一试。
以前碰到过,就这么解决的。

设置:1)Release 2)在静态库中使用MFC 3)多线程(MT)
应该没问题。
[解决办法]
关闭工程,重新打开编译一下,
[解决办法]
google 结果
参见http://topic.csdn.net/t/20050525/17/4035191.html 第三条


[解决办法]
直接把需要的动态库copy过去不就行了
为啥还设置使用静态库连接
[解决办法]
1) 调整包含库的位置
2) 在连接的动态库中其中一个动态库中使用 /NODEFAULTLIB:MSVCRT.lib 编译选项
[解决办法]
还有一种可能是你指定的 Runtime Libary 与动态库不一致
在工程属性页中修改为其中之一
Multi-threaded Debug (/MTd)
Multi-threaded (/MT)
Multi-threaded DLL (/MD)
Multi-threaded Debug DLL (/MDd)
也许能解决问题
[解决办法]
看错误提示貌似是库冲突了,显示都都是C库函数,libcmt.lib是什么?把他从链接库
中去掉,那些函数MSVCRT.lib和libcmt.lib都有。

热点排行