【问题标题】:Compiling a MFC app from Visual Studio 2010 to 2012 RC results in LNK2038将 MFC 应用程序从 Visual Studio 2010 编译到 2012 RC 会导致 LNK2038
【发布时间】:2012-08-02 05:48:54
【问题描述】:

我的项目在 VS 2010 的调试和发布模式下编译和运行正常。 今天我尝试用 VS 2012 编译它,我得到了这个错误:

1>  Generating Code...
1>pcrecppd.lib(pcrecpp.obj) : error LNK2038: mismatch detected for '_MSC_VER': 
value '1600' doesn't match value '1700' in NamesEditorDlg.obj

我在代码中搜索了“_MSC_VER”,但找不到任何匹配项。我也找不到“1600”或“1700”。

所以我想知道如何解决这个问题。

【问题讨论】:

  • 您是刚刚将文件复制到 2012 文件夹还是创建了新项目并导入?
  • _MSC_VER 是一个预定义的宏,因此它是内置的,您不会在源代码中找到它。 (显然它的值在 VS2010 中为 1600,在 VS2012 中为 1700。)您是否复制了任何二进制文件,VS2010 固有的任何内容,编译的目标文件?您确定较新的编译器不会尝试访问较旧的库吗?你用 VS2012 创建的新项目能编译吗?
  • 嘿,看看我发现了什么:Help with Linker error LNK2038 !
  • 不要混合使用 VS2010 编译的 .lib 文件和使用 VS2012 编译的 .obj 文件。编译器不保证对象布局在不同版本的编译器之间是兼容的,尤其是来自标准 C++ 库的那些。重建一切。

标签: c++ visual-studio-2010 mfc linker-errors visual-studio-2012


【解决方案1】:

查看http://msdn.microsoft.com/en-us/library/b0084kay.aspx 似乎该变量包含编译器的版本号。我认为修复它的最佳方法是在 2012 年创建一个新项目并将源文件添加到新项目中。

【讨论】:

    【解决方案2】:

    看起来您在 vc2012 中使用来自 vc2010 的 .lib(猜测它看起来像一个 PCRE 库)。您需要使用 DLL 重新编译所有 .lib 或运行时链接(即 LoadLibrary、GetProcAddress 等)。

    【讨论】:

      【解决方案3】:

      不,您只需要检查项目的属性。存在指向旧项目文件的链接。需要在“.NET Framework 和链接”页面上打开项目属性 del all links end add new for new 2012 project files。

      【讨论】:

        【解决方案4】:

        在项目属性中,选择常规,然后将“平台工具集”设置更改为“Visual Studio 2010 (v100)”。在我这样做之后,我的代码在原始库中编译得很好。

        【讨论】:

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