前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VS编译链接时错误(Error Link2005)的解决方法

VS编译链接时错误(Error Link2005)的解决方法

作者头像
24K纯开源
发布2018-01-18 10:38:56
2.1K0
发布2018-01-18 10:38:56
举报
文章被收录于专栏:24K纯开源24K纯开源

? ? ? 近期参与的项目中使用了公司另外一个同事提供的一个静态库文件。该静态库文件集成了CUDA, OpenCL两个库,用于做图形加速计算,提高视频解码拼接速度。但是在编译链接项目时,VS爆出如下错误:

代码语言:javascript
复制
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xi_a 已经在 MSVCRT.lib(cinitexe.obj) 中定义
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xi_z 已经在 MSVCRT.lib(cinitexe.obj) 中定义
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xc_a 已经在 MSVCRT.lib(cinitexe.obj) 中定义
1>LIBCMTD.lib(crt0init.obj) : error LNK2005: __xc_z 已经在 MSVCRT.lib(cinitexe.obj) 中定义

  编译阶段并没有出现错误,根据VS输出判断是符号重定义。但是,如上提示中的符号“__xi_a”等并没有出现在源代码中。因此判断可能是库的版本不对。查看一下工程的属性配置,右键选择工程->属性->C/C++->代码生成->运行库:

? ? ? 可以看到主工程使用了“多线程DLL(/MD)”版本的运行库,而同时开发静态库时使用了“多线程调试(/MTd)”的配置:

? ? ? 显然在编译链接的时候会产生错误,导致无法正常生成可执行程序。将静态库工程和主工程的运行时库的版本设置为一致的就可以解决问题了。另外,网上还提供了一种新的方法来查看工程链接的具体静态库路径:在“属性->链接器->常规->显示进度”中进行选择。

参考链接

1.?http://stackoverflow.com/questions/5249431/linker-trouble-how-to-determine-where-a-defaultlib-is-coming-from/16899011#16899011

2.?http://stackoverflow.com/questions/20918729/what-is-causing-vs2013-error-lnk2005-xi-a-already-defined-in-msvcrt-libcinit

3.?http://stackoverflow.com/questions/2728649/error-lnk2005-xxx-already-defined-in-msvcrt-libmsvcr100-dllc-something-libc

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com