【问题标题】:Linker error after porting C++ application from VC6 to VS2005将 C++ 应用程序从 VC6 移植到 VS2005 后出现链接器错误
【发布时间】:2008-12-10 12:52:57
【问题描述】:

将我的应用程序从 VC6 移植到 Visual Studio 2005 时出现错误。

有人知道这是什么意思吗?

mfcs80.lib(dllmodul.obj):错误 LNK2005: _DllMain@12 已定义 在 MSVCRT.lib(dllmain.obj) 中

【问题讨论】:

  • 我在链接过程中遇到错误,我在 vc6 中没有,
  • 这个问题只能勉强忍受,因为 Rich B 的编辑量很大。问题非常本地化。
  • 抱歉,您为什么要从 10 年前的技术移植到更老的技术?
  • 提问者并不是说VC5——mfcs80.lib表明他使用的是VS2005。
  • 我明白了。我自己不是 MS 用户,但“LNK2005”应该是一个提示。

标签: visual-c++ visual-studio-2005 mfc visual-c++-6


【解决方案1】:

来自http://support.microsoft.com/default.aspx?scid=kb;en-us;q148652

CRT 时发生 LNK2005 错误 库和 MFC 库是链接的 在 Visual C++ 中的顺序错误

因为

CRT 库使用弱外部 用于新建、删除和 DllMain 函数。 MFC 库 还包含 new、delete 和 DllMain 职能。这些功能需要 之前要链接的 MFC 库 CRT 库已链接。

所以

有两种方法可以解决这个问题 问题。第一个解决方案涉及 强制链接器链接 库以正确的顺序。这 第二个解决方案允许您找到 导致问题的模块和 纠正它。

要么

强制链接器链接 顺序正确的库

  1. 在“项目”菜单上,单击“设置”。
  2. 在“项目设置”对话框的“设置”视图中,单击 选择项目配置 收到链接错误。
  3. 在“链接”选项卡上,单击以选择“类别”组合框中的“输入”。
  4. 在忽略库框中,插入库名称(例如, Nafxcwd.lib;Libcmtd.lib)。

    注意 /NOD: 中的链接器命令行等效项。

  5. 在对象/库模块框中,插入库名称。你 必须确保列出这些 按顺序和前两个 行中的库(例如, Nafxcwd.lib Libcmtd.lib)。

要在 Visual C++ .NET 中设置此选项, 阅读“设置 Visual C++ 项目 属性”在线帮助主题。

或者

找到并更正 问题模块 查看当前 图书馆链接顺序,请遵循这些 步骤:

  1. 在“项目”菜单上,单击“设置”。
  2. 在“项目设置”对话框的“设置”视图中,单击 选择项目配置 收到链接错误。
  3. 在“链接”选项卡上,在“项目选项”中键入 /verbose:lib 盒子。
  4. 重建您的项目。库将在输出中列出 链接过程中的窗口。

【讨论】:

    【解决方案2】:

    我确信这可能发生的原因有很多——我发现的最糟糕的原因是在尝试集成一些最初是 DLLS 的静态库(我们的)时(事实上,我们将项目构建为DLL 和静态库)。

    我们的 C++/CLI DLL 正在使用这些库的静态版本(为了避免在使用 C++/CLI Dll 时导致 ASP.NET 加载问题的 DLL 依赖问题)并且最初看到相同的链接器错误。

    问题原来是使用了 AFX_MANAGE_STATE(AfxGetStaticModuleState()) 宏,当代码构建为 DLL 时需要该宏,但静态库调用实际上并不需要该宏。

    为了解决这个问题,我最终将以下代码添加到每个项目的 stdafx.h 中。

    #ifdef OMUTILITIES_LINK_STATIC
        #undef AfxGetStaticModuleState
        #define AfxGetStaticModuleState AfxGetModuleState
    #endif
    

    当然,这可能不是您的具体问题。但我最终想到的方法是打开链接器的 /VERBOSE 选项,并查看它在运行时库中的拉取对象、内容、位置和时间。 (vs2005中的项目属性/配置属性/链接器/显示进度)

    【讨论】:

      【解决方案3】:

      您可以将链接器输入设置为忽略项目属性中的麻烦库,但这可能有效,也可能无效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多