编译链接static lib时的小问题,转自http://www.dbgger.com/index.asp

(转)

今天在将两个人的VC6的代码合并到一起的时候,编译出现错误:
LIBCMT.lib(dosmap.obj) : error LNK2005: __dosmaperr already defined in LIBCD.lib(dosmap.obj)
LIBCMT.lib(tolower.obj) : error LNK2005: __tolower already defined in LIBCD.lib(tolower.obj)
LIBCMT.lib(tolower.obj) : error LNK2005: _tolower already defined in LIBCD.lib(tolower.obj)
就是链接库中有重复定义的函数。Google了一下发现这是个挺普遍的问题。给出了很多种解决方法:
1)将所有用到的系统级链接库copy到私有目录中,作为私有的dll编译,不使用系统的。——这个方法没有尝试,因为它麻烦了,得确定复制所需要的dll,呵呵。
2)通过在Project——Setting——Link——Project Options中增加编译开关/verbose:lib可以显示详细的库链接顺序,了解具体是哪里的链接库文件出现问题。发现是Searching C:/Program Files/Microsoft Visual Studio/VC98/LIB/LIBCMT.lib:的。
使用/NODEFAULTLIB: LIBCMT.lib /NODEFAULTLIB: LIBCD.lib的编译参数,不检查相应的链接库内容。——但是我使用的时候不好用,出现大量找不到函数名的错误,所以也放弃了。

下面是一张可能发生冲突的列表,若要使用此运行时库 请忽略这些库:(摘自http://www.vckbase.com/bbs/prime/viewprime.asp?id=680)
单线程:(libc.lib) libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 
多线程:(libcmt.lib) libc.lib、msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 
使用 DLL 的多线程:(msvcrt.lib) libc.lib、libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib 
调试单线程:(libcd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib 
调试多线程:(libcmtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib 
使用 DLL 的调试多线程:(msvcrtd.lib) libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib 

3)使用 #pragma   comment(linker,"/FORCE:MULTIPLE")  或者在编译时添加/FORCE:MULTIPLE参数。——问题解决了,但是因为我对VC不是很了解,所以不知道根本的原因。

 

 

 

我的最后采用了方法三,所有的error都变成了warning,编译成功。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值