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
.