将VS2012 Windows 8 Metro解决方案转换为VS2013后的未解析符号(在Windows 8.1上)

lui*_*nal 7 linker-errors microsoft-metro visual-studio-2013 windows-8.1

我有一个问题,我目前无法有效解决,因为我还不熟悉Metro应用程序开发.所以请忍受我:)

长话短说,我有一个大型,复杂的VS2012 Metro应用程序托管+本机解决方案(目前在Windows 8上构建)到面向Windows 8.1的VS2013中.

我将解决方案导入VS2013(在Windows 8.1上托管),并为其运行转换以及其中的所有子项目.Stuff编译,但是我们遇到问题就是链接器.这是我们得到的链接器错误的一个例子:

    error LNK2019: unresolved external symbol __imp___beginthreadex referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___mbsrchr referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol _getenv referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___beginthreadex referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___endthreadex referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___mbsrchr referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___mbsnbicmp referenced in function <blahblahblah>
    error LNK2019: unresolved external symbol __imp___dupenv_s referenced in function <blahblahblah>
Run Code Online (Sandbox Code Playgroud)

问题是,对于每个"缺失"的符号,我们可以看到声明存在于VS2013提供的MS Windows头文件中.检查每个子项目中的引用表明它们引用了Windows的"核心"库.

任何想法为什么会这样?谢谢.

Han*_*ant 2

我们可以看到该声明存在于 VS2013 提供的 MS Windows 头文件中。检查每个子项目中的引用表明它们正在引用 Windows“核心”库

通过这些小信息很难诊断出了什么问题,但很明显,您正在寻找完全错误的角落来解决这个问题。缺少的符号不是Windows api 函数,而是 C 运行时支持函数。它们用于 C++ 项目,您一直在查看 .NET 项目。

因此,您需要关注生成这些链接器错误的一个项目,它是一个 C++ 项目。为了使其链接到具有这些符号的 .lib 而发出的链接器命令是完全自动的,因此不会出现太多错误。首先要做的就是强制完全重建,这样就不会使用 VS2012 中先前构建留下的过时的 .obj 和 .lib 文件。右键单击该项目并选择“重建”。

值得使用文本编辑器(如记事本)查看该项目的 .vcxproj 文件,并确保转换正常进行并进行正确的更改:

  • ToolsVersion 属性必须从“4.0”更改为“12.0”
  • MinimumVisualStudioVersion 属性必须从 11.0 更改为 12.0
  • 添加了两个新属性:ApplicationType (Windows Store) 和 ApplicationTypeRevision (8.1)
  • 每个配置的 PlatformToolset 属性必须从 v110 更改为 v120

名为 link.read.1.tlog 的目录中有一个Debug\projectname.tlog包含诊断信息的日志文件,它显示链接器使用的所有 .lib 文件。它必须包含这一行:

C:\程序文件 (X86)\MICROSOFT VISUAL STUDIO 12.0\VC\LIB\STORE\VCCORLIBD.LIB

这是包含这些符号的 .lib 文件。