Ошибка компоновщика при использовании 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>

почему это происходит?

  1. выбор v110_xp набор инструментов платформы автоматически устанавливает Минимальная Требуемая Версия компоновщика параметр 5.01 или 5.02, потому что это версия 32-разрядной и 64-разрядной Windows XP, соответственно.

  2. когда Минимально Необходимых Версия свойство установлено, независимо от того,подсистема также установлен, Visual Studio пытается добавить оба свойства в аргументы командной строки компоновщика. Это приводит к ,5.01, когда подсистема не установлен (вместо предполагаемого /SUBSYSTEM:CONSOLE,5.01), и компоновщик понимает это как попытку указать файл с именем", 5.01".

последний является ошибкой в Visual Studio (не напрямую связанной с v110_xp). Когда Минимальная Требуемая Версия установлен и подсистема нет, VS должен либо игнорировать Минимальная Требуемая Версия или выдать предупреждение, но оно не должно отправлять искаженные аргументы компоновщику.