• Lnk2005 问题


    首先感谢http://www.cnitblog.com/vcleaner/archive/2005/05/25/203.html这个地址的作者
    另外自己参考了msdn的一些信息,地址:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vccomp/html/d9587adc-68be-425c-8a30-15dbc86717a4.htm
    为了方便自己查询,转载部分:


    造成LNK2005错误主要有以下几种情况:

    1. 重复定义全局变量。
    2. 头文件的包含重复。
    3. 使用第三方的库造成的。
    这种情况主要是C运行期函数库和MFC的库冲突造成的。
    具体的办法就是将那个提示出错的库放到另外一个库的前面。
    另外选择不同的C函数库,可能会引起这个错误。
    微软和C有两种C运行期函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。
    另外一种是支持多线程的:msvcrt.lib。
    如果一个工程里,这两种函数库混合使用,可能会引起这个错误,
    一般情况下它需要MFC的库先于C运行期函数库被链接,
    因此建议使用支持多线程的msvcrt.lib。
    所以在使用第三方的库之前首先要知道它链接的是什么库,
    否则就可能造成LNK2005错误。
    如果不得不使用第三方的库,可以尝试按下面所说的方法修改,
    但不能保证一定能解决问题,前两种方法是微软提供的:


    A、选择VC菜单Project->Settings->Link->Catagory选择Input,
    再在Ignore libraries 的Edit栏中填入你需要忽略的库,
    如:Nafxcwd.lib;Libcmtd.lib。
    然后在Object/library Modules的Edit栏中填入正确的库的顺序,
    这里需要你能确定什么是正确的顺序,呵呵,God bless you!


    B、选择VC菜单Project->Settings->Link页,
    然后在Project Options的Edit栏中输入/verbose:lib,
    这样就可以在编译链接程序过程中在输出窗口看到链接的顺序了。


    C、选择VC菜单Project->Settings->C/C++页,
    Catagory选择Code Generation后
    再在User Runtime libraray中选择MultiThread DLL等其他库,逐一尝试。


    本人所遇到的问题是第3类

    调试的时候,先采用B方法的/verbose:lib,然后A方法

    本人在未看到上述方法,采用都是微软msdn提供的:若要修复,请将 /FORCE:MULTIPLE 添加到链接器命令行选项,并确保 uuid.lib 是引用的第一个库。

    缺点就是:会出现Lnk4006的警告

    备注:
    在Lnk4098中有一份忽略列表可以参考
    ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vccomp/html/1f1b1408-1316-4e34-80f5-6a02f2db0ac1.htm

  • 相关阅读:
    C# .NET5.0 平台介绍、演变
    ORA01034/ORA27101解决
    navicat无法连接虚拟机MySQL
    [原创]Windows下Google V8 javascript引擎编译
    CentOS 6.9安装MySQL5.5
    国内yum源
    【转】关于C++程序的编码问题
    VS C4819 编译错误解决方法
    Windows下Vundle安装
    vmware NAT 静态ip配置
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/1526073.html
Copyright © 2020-2023  润新知