Visual Studio 2010 - LINK: фатальная ошибка LNK1181: невозможно открыть входной файл "■/.obj"

У меня есть VS 2010 в Windows 7. Я создаю новый проект, выбираю язык С++, проект Win32, DLL, экспортирует символы, а затем завершаю. Теперь, когда я компилирую проект без каких-либо изменений в том, что генерирует VS, я получаю...

LINK: фатальная ошибка LNK1181: невозможно открыть входной файл "■/.obj"

У меня также установлен VS 2008 на той же машине. Я выполняю те же шаги и компилируется. Что я делаю неправильно?

Edit Хорошо, я обнаружил, что эта ошибка связана с использованием старой версии используемого компоновщика. Я не знаю, почему. В VS2010 каталоги проекта устанавливаются иначе, чем в VS2008. Как только я это выясню, возможно, я смогу решить свою собственную проблему.

Ответ 1

Ну, прошло уже некоторое время после публикации этих вопросов. Я выяснил обходное решение некоторое время назад, так что теперь я собираюсь ответить на него сам. Но если у вас есть какие-то лучшие идеи или дополнительная информация, которую другие могли бы получить, отправьте сообщение.

Я обнаружил, что после создания моего проекта на С++ мне нужно удалить листы свойств "Microsoft.Cpp.Win32.User". Если я этого не сделаю, я получаю странную ошибку выше, но если я их удалю, простой проект компилируется в порядке. Чтобы удалить их...

  • Выберите View- > Other Windows- > Propery Manager
  • Разверните группу свойств (название вашего проекта)
  • Разверните все конфигурации (мои "Debug | Win32" и "Release | Win32" )
  • Multi-select все листы свойств Microsoft.Cpp.Win32.User(по одному в каждой конфигурации)
  • Удалить

Ответ 2

Visual Studio 2012 - LINK: фатальная ошибка LNK1181: невозможно открыть входной файл "■/.obj" Я использую VS 2012!!!!

Я проследил это немного больше. Для меня это НЕ происходит, когда я пытаюсь создать x64-разрядную версию моего приложения. Я обнаружил, что мой проект .vcxproj имеет условие ImportGroup, которое выглядит следующим образом:

  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>

У меня также есть одна для моей сборки x64, которая выглядит так:

  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>

Итак, я посмотрел файлы:

Users\??????????\AppData\Local\Microsoft\MSBuild\v4.0
Microsoft.Cpp.Win32.user.props
Microsoft.Cpp.x64.user.props

Разница в том, что каждый из них отличается. x64 в основном пуст, а Win32 имеет три пути.

Раздел версии Win32 содержит три пути: <ExecutablePath>, <IncludePath> и <LibraryPath>.

Я понял, что удаление пути <ExecutablePath> приводит к тому, что эта проблема исчезает. Я смотрю глубже в этот путь, чтобы увидеть, если что-нибудь всплывает на меня, но я думал, что пройду его, если другие могут найти, что не так с этим путем.

Ответ 3

Мне тоже приходилось сталкиваться с той же проблемой при компиляции проекта VС++ в Visual Studio 2017. Компилятор жаловался на следующее.

LINK : fatal error LNK1181: cannot open input file " ■/.obj"

В процессе анализа проблемы выяснилось, что проект "Свойства конфигурации - Каталоги VС++ - Исполняемые каталоги", как показано ниже, содержит путь к папке Microsoft Visual Basic C:\Program Files (x86)\Microsoft Visual Studio\VB98, которая имеет свой собственный link.exe.

Диалоговое окно исполняемых каталогов Visual Studio

Ошибка компоновщика произошла из-за того, что Visual Studio вызывал компоновщик Visual Basic, а не компоновщик Visual С++!

Это произошло из-за того, что в этом диалоговом окне указатель на ссылку на сначала, поэтому Visual Studio сталкивается с Visual Basic linker.exe во время прохождения по пути к исполняемым каталогам.

Одним из решений является обновление порядка включения пути в исполняемые каталоги путем перемещения пути к папке VB98 с первой до последней. Это может быть достигнуто путем редактирования файла (ов) требуемого свойства, такого как Microsoft.Cpp.Win32.user.props, присутствующего в каталоге $(USERPROFILE)\appdata\local\microsoft\msbuild\v4.0.