Ошибка компоновщика при использовании V110 xp: "не удается открыть файл', 5.01'"
Я создаю некоторые проекты Visual C++ DLL и EXE с Visual Studio 2012. При построении с набором инструментов платформы по умолчанию ноутбук-трансформер V110 сборка прошла успешно, но при создании с помощью Windows XP совместимой платформы toolset v110_xp он выдает следующее ошибка компоновщика в каждом проекте:
ссылка: фатальная ошибка LNK1104: не удается открыть файл', 5.01'
обратите внимание, что если я сменю платформу для Win32 to х64 изменение ошибки:
ссылка: фатальная ошибка LNK1104: не удается открыть файл', 5.02'
Это можно легко воспроизвести, создав новый EXE-проект из шаблона "пустой проект" в Visual Studio и добавив некоторые *.файл cpp определение int main() {return 6;}
. Он будет успешно строиться, пока вы не измените набор инструментов платформы с ноутбук-трансформер V110 to v110_xp.
почему это происходит и как могу ли я успешно создавать эти проекты с совместимостью с Windows XP?
1 ответов
в свойствах проекта, в разделе Линкер ->система убедитесь, что вы установить подсистема свойства (либо консоль для консольных приложений, или Windows для DLL и не консольных приложений).
Если вы используете общие листы свойств (*.props) чтобы установить свойства проекта во всех ваших проектах, вы можете добавить что-то вроде этого, чтобы убедиться, что подсистема is присвоено допустимое значение, если проект не указывает его явно.
<?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>
почему это происходит?
выбор v110_xp набор инструментов платформы автоматически устанавливает Минимальная Требуемая Версия компоновщика параметр 5.01 или 5.02, потому что это версия 32-разрядной и 64-разрядной Windows XP, соответственно.
когда Минимально Необходимых Версия свойство установлено, независимо от того,подсистема также установлен, Visual Studio пытается добавить оба свойства в аргументы командной строки компоновщика. Это приводит к
,5.01
, когда подсистема не установлен (вместо предполагаемого/SUBSYSTEM:CONSOLE,5.01
), и компоновщик понимает это как попытку указать файл с именем", 5.01".
последний является ошибкой в Visual Studio (не напрямую связанной с v110_xp). Когда Минимальная Требуемая Версия установлен и подсистема нет, VS должен либо игнорировать Минимальная Требуемая Версия или выдать предупреждение, но оно не должно отправлять искаженные аргументы компоновщику.