手上是一个编码器+网络的应用,我的工程依赖编码器静态库xxx.lib
编码器的静态库由异地同事开发,链接单线程C库(libcd之类) 我这边是多线程工程,
链接时碰到一处警告说libcd和多线程版本冲突,/NODEFAULTLIB:"LIBC" /NODEFAULTLIB:"LIBCD"忽略了
(我当然直接问他要多线程版本,但是对方认为编译过了属于没问题= =!,说出问题了再说吧,我估计可能对方是考虑性能,其实真出了问题的话,这种问题一定会隐藏很深,岂能随便定位到的?不过作为新员工,不便多说是非)然后编译出现了奇怪的问题
这个库必须加在source file下 而不能#pragma comment(lib, "xxx.lib")
否则是"LINK : fatal error LNK1196: invalid or corrupt import object: unknown version"
检查链接详情,发现加在工程文件视目录source file下,xxx.lib中有一个符号是首先被链接器定位的,
而在stdafx.h中写pragma,则这个符号是随后才被定位,而导致LNK1196现在是加在source file下凑合着过,我想问大大们,有没有因为链接多个C库,后来用开关忽略一个而引起过实际的问题?或者说,这种威胁是否真的存在?谢谢!300奉上。
编码器的静态库由异地同事开发,链接单线程C库(libcd之类) 我这边是多线程工程,
链接时碰到一处警告说libcd和多线程版本冲突,/NODEFAULTLIB:"LIBC" /NODEFAULTLIB:"LIBCD"忽略了
(我当然直接问他要多线程版本,但是对方认为编译过了属于没问题= =!,说出问题了再说吧,我估计可能对方是考虑性能,其实真出了问题的话,这种问题一定会隐藏很深,岂能随便定位到的?不过作为新员工,不便多说是非)然后编译出现了奇怪的问题
这个库必须加在source file下 而不能#pragma comment(lib, "xxx.lib")
否则是"LINK : fatal error LNK1196: invalid or corrupt import object: unknown version"
检查链接详情,发现加在工程文件视目录source file下,xxx.lib中有一个符号是首先被链接器定位的,
而在stdafx.h中写pragma,则这个符号是随后才被定位,而导致LNK1196现在是加在source file下凑合着过,我想问大大们,有没有因为链接多个C库,后来用开关忽略一个而引起过实际的问题?或者说,这种威胁是否真的存在?谢谢!300奉上。
如果对方提供的库是不可以重入的,但是你的用法已经用同步行为保护了它的库函数,那么,你忽略了libcd库也基本不会有什么问题。但是如果对方提供的库是不可以重入的,你的用法也没考虑多线程保护的问题,那么这个时候忽略了libcd库可能会有隐藏的问题。
2005里已经把多线程的库和单线程的库合一了,是libcpmt.lib
忽略libcd,用libcpmt.lib