关于调用静态链接库LIB,提示重定义或库冲突的错误
2014-06-12 15:06
417 查看
在一个项目里使用了静态链接库,但是一编译就报错
LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>LIBCMTD.lib(dosmap.obj) : error LNK2005: __errno 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
重新设置了项目属性(包含路径,引用路径,库路径以及依赖项),依然报错,有时还报错“默认库“library”与其他库的使用冲突"。看了问题还是出在库引用上,查了一些资料,原因如下:
运行时库现在包含防止混合不同类型的指令。如果试图在同一个程序中使用不同类型的运行时库或使用调试和非调试版本的运行时库,则将收到此警告。例如,如果编译一个文件以使用一种运行时库,而编译另一个文件以使用另一种运行时库(例如单线程运行时库对多线程运行时库),并试图链接它们,则将得到此警告。应将所有源文件编译为使用同一个运行时库。原因和解决办法:编译过程中,链接器搜索的库有LIBC.lib、LIBCMT.lib、LIBCD.lib、LIBCMTD.lib等类型。根据工程里面设置的选项而连接不同的库。在一个多模块(调用其它dll等)的程序中,如果编译一个文件使用一种运行时库,而编译另一个文件以使用另一种运行时库,并试图链接它们,则将得到此警告。
正确的解决办法是:在所有的模块使用相同的运行时库选项编译,然后链接。
由于我其他项目使用的是/MTd运行库编译模式,而当前项目默认是/MDd模式,这样就出现了不同模块运行时库选项不一致的问题,于是解决办法就很简单了,因为使用了静态库,设置代码生成——链接库的地方就不能用动态库的/MDd, 而是/MTd
LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>LIBCMTD.lib(dosmap.obj) : error LNK2005: __errno 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
1>LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义
重新设置了项目属性(包含路径,引用路径,库路径以及依赖项),依然报错,有时还报错“默认库“library”与其他库的使用冲突"。看了问题还是出在库引用上,查了一些资料,原因如下:
运行时库现在包含防止混合不同类型的指令。如果试图在同一个程序中使用不同类型的运行时库或使用调试和非调试版本的运行时库,则将收到此警告。例如,如果编译一个文件以使用一种运行时库,而编译另一个文件以使用另一种运行时库(例如单线程运行时库对多线程运行时库),并试图链接它们,则将得到此警告。应将所有源文件编译为使用同一个运行时库。原因和解决办法:编译过程中,链接器搜索的库有LIBC.lib、LIBCMT.lib、LIBCD.lib、LIBCMTD.lib等类型。根据工程里面设置的选项而连接不同的库。在一个多模块(调用其它dll等)的程序中,如果编译一个文件使用一种运行时库,而编译另一个文件以使用另一种运行时库,并试图链接它们,则将得到此警告。
正确的解决办法是:在所有的模块使用相同的运行时库选项编译,然后链接。
由于我其他项目使用的是/MTd运行库编译模式,而当前项目默认是/MDd模式,这样就出现了不同模块运行时库选项不一致的问题,于是解决办法就很简单了,因为使用了静态库,设置代码生成——链接库的地方就不能用动态库的/MDd, 而是/MTd
相关文章推荐
- 关于调用静态链接库LIB,提示重定义或库冲突的错误
- 调用RDLC报表提示错误:尚未指定报表定义的来源
- 关于weblogic12c调用oracle9i提示错误的问题
- Asp.net 关于错误提示 类型“XXX1”在未被引用的程序集中定义,必须添加对程序集XXX2的引用
- 调用scriptManager时提示sys未定义错误解决方法
- android关于提示R.java调用错误问题
- 关于微信服务商用户调用接口提示签名错误的原因
- 关于laravel5.4 错误提示的调用
- 关于ORACLE提示:"System.Data.OracleClient.OracleException: ORA-06550: 第 1 行, 第 7 列: \nPLS-00306: 调用 'xxxxxx' 时参数个数或类型错误\nORA-06550: 第 1 行, 第 7 列: \nPL/SQL: Statement ignored\n\r\n 的错误
- 关于安装.NET Framework 2.0时偶然碰到的问题(提示"Error 205015. 安装程序集..../System.EnterpriseServices.dll失败,原因是出现了系统错误:拒绝访问。")
- 关于实现序列化的类提示没有定义serialVersionUID域
- 记录一下,关于错误提示:could not find a part of path “X:\”的解决办法
- 关于多次刷新网页(该网页调用COM)出现在COM中的错误
- 关于编译eMule0.48a 提示: zlib.lib(gzio.obj) : error LNK2019: 无法解析的外部符号 __imp__strerror ,该符号在函数 _gzerror 中被引用
- 关于Ajax 错误:'sys'未定义解决方法.
- 关于Validator错误提示字体小
- 关于Ajax 错误:'sys'未定义解决方法.
- Render() 的过程中调用 RegisterForEventValidation的错误提示解决
- 关于“系统错误&H80004015(-2147467243).此类别是作为跟调用程序不同的安全ID运行的”的解决办法
- ASP.NET调用Oracle组件提示无法装载DLL(oci.dll)错误的解决办法