首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用v110_xp时链接器错误:“无法打开文件',5.01'”

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

Stack Overflow用户
提问于 2014-06-03 09:55:13
回答 1查看 6K关注 0票数 8

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

链接:致命错误LNK1104:无法打开文件',5.01‘

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

链接:致命错误LNK1104:无法打开文件',5.02‘

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

为什么会发生这种情况,以及如何使用Windows兼容性成功地构建这些项目?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-03 09:55:13

在Linker ->系统下的项目属性中,确保设置了 SubSystem property (控制台用于控制台应用程序,也可以设置为Windows和非控制台应用程序)。

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

代码语言:javascript
运行
复制
<?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的版本。
  2. 设置最低要求版本属性时,无论是否也设置了SubSystem,Visual都会尝试将这两个属性添加到链接器的命令行参数中。当未设置,5.01 (而不是预期的/SUBSYSTEM:CONSOLE,5.01)时,这将导致SubSystem,而链接器将此理解为试图指定一个名为",5.01“的文件。

后者是Visual中的一个bug (与v110_xp没有直接关系)。如果设置了最低要求的版本,而SubSystem没有设置,VS要么忽略最低要求的版本,要么发出警告,但是它不应该向链接器发送格式错误的参数。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24012154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档