使用v110_xp时链接器错误:"无法打开文件',5.01'"

时间:2014-06-03 09:55:14

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

我正在使用Visual Studio 2012构建一些Visual C ++ DLL和EXE项目。使用默认平台工具集 v110 构建时,构建成功,但在使用Windows XP兼容平台工具集构建时 v110_xp 它失败,每个项目中出现以下链接器错误:

  

LINK:致命错误LNK1104:无法打开文件',5.01'

请注意,如果我将平台从 Win32 更改为 x64 ,则错误会更改为:

  

LINK:致命错误LNK1104:无法打开文件',5.02'

通过在Visual Studio中的“Empty Project”模板中创建一个新的EXE项目并添加一些定义int main() {return 6;}的* .cpp文件,可以轻松地重现这一点。它将成功构建,直到您将平台工具集从 v110 更改为 v110_xp

为什么会发生这种情况?如何在Windows XP兼容性下成功构建这些项目?

1 个答案:

答案 0 :(得分:18)

在项目属性中,在链接器下 - > 系统,确保设置 SubSystem 属性(对于控制台应用程序控制台,或 >用于DLL和非控制台应用程序的Windows

如果使用公共属性表(* .props)在所有项目中设置项目属性,则可以添加类似这样的内容,以确保在项目中为 SubSystem 分配了有效值没有明确指定一个。

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemDefinitionGroup>
    <Link>
      <SubSystem Condition="'%(Link.SubSystem)'=='' Or '%(Link.SubSystem)'=='NotSet'">Windows</SubSystem>
    </Link>
  </ItemDefinitionGroup>
</Project>

为什么会这样?

  1. 选择 v110_xp 平台工具集会自动将最低要求版本链接器设置设置为 5.01 5.02 ,因为这是分别是32位和64位Windows XP的版本。

  2. 当设置 Minimum Required Version 属性时,无论是否还设置了 SubSystem ,Visual Studio都会尝试将这两个属性添加到链接器中。 ; s命令行参数。如果未设置 SubSystem (而不是预期的,5.01),则会导致/SUBSYSTEM:CONSOLE,5.01,并且链接器将此理解为尝试指定名为&#34;,5.01的文件&#34;

  3. 后者是Visual Studio中的错误(与 v110_xp 无直接关系)。如果设置最低要求版本并且 SubSystem 不是,则VS应该忽略最低要求版本或发出警告,但它不应该& #39; t向链接器发送格式错误的参数。