我正在用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兼容性成功地构建这些项目?
发布于 2014-06-03 09:55:13
在Linker ->系统下的项目属性中,确保设置了 SubSystem property (控制台用于控制台应用程序,也可以设置为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>
这一切为什么要发生?
,5.01
(而不是预期的/SUBSYSTEM:CONSOLE,5.01
)时,这将导致SubSystem,而链接器将此理解为试图指定一个名为",5.01“的文件。后者是Visual中的一个bug (与v110_xp没有直接关系)。如果设置了最低要求的版本,而SubSystem没有设置,VS要么忽略最低要求的版本,要么发出警告,但是它不应该向链接器发送格式错误的参数。
https://stackoverflow.com/questions/24012154
复制相似问题