zoukankan      html  css  js  c++  java
  • VS编译链接时错误(Error Link2005)的解决方法

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

    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

  • 相关阅读:
    git merge & git rebase 你用哪一个?
    [牛客题霸-高频算法面试题]一样的水
    [牛客题霸-高频算法面试题]那些插队的人
    解决ionic5多个模态关闭一个其他不显示的问题
    Selenium面试题+答案
    记删除AlibabaProtect.exe的经历
    免费的接口数据测试API
    删除重复的电子邮箱-leetcode
    firewall命令行详解
    将群晖恢复到出厂设置
  • 原文地址:https://www.cnblogs.com/csuftzzk/p/vs_error_link2005.html
Copyright © 2011-2022 走看看