Visual Studio: ССЫЛКА: фатальная ошибка LNK1181: не удается открыть входной файл - PullRequest
71 голосов
/ 23 июня 2011

Я уже некоторое время сталкиваюсь со странной ошибкой в ​​Visual Studio 2010.

У меня есть решение, состоящее из проекта, который компилируется в статическую библиотеку, и другого проекта, который действительно прост, но зависитв этой библиотеке.

Иногда, в последние дни, очень часто, после перестройки решения или просто компиляции с 1-3 измененными исходными файлами, я получаю следующую ошибку:

2>LINK : fatal error LNK1181: cannot open input file 'thelibrary.lib'
========== Rebuild All: 1 succeeded, 1 failed, 0 skipped ==========

Где компиляция thelibrary.lib прошла успешно без каких-либо ошибок или предупреждений.

Я пытался очистить решение, но это не всегда работает.

  • Что здесь не так?

Ответы [ 17 ]

0 голосов
/ 01 ноября 2018

У меня была такая же ошибка при запуске lib.exe из cmd в Windows с длинным списком аргументов. очевидно, cmd.exe имеет максимальную длину строки около 8 КБ символов, в результате чего имена файлов в конце этого порога были изменены, что привело к ошибочной ошибке в имени файла. Мое решение состояло в том, чтобы урезать линию. Я удалил все пути из имен файлов и добавил один путь, используя параметр / LIBPATH. например:

/LIBPATH:absolute_path /OUT:outfilename filename1.obj filename2.obj ... filenameN.obj
0 голосов
/ 04 ноября 2017

У меня была такая же проблема.Решил его, определив макрос OBJECTS, содержащий все объекты компоновщика, например:

OBJECTS = target.exe kernel32.lib mylib.lib (etc)

, а затем указав $(OBJECTS) в командной строке компоновщика.1008 * Visual Studio хотя, просто nmake и файл .MAK

0 голосов
/ 05 июня 2016

Вы также можете решить проблему пробелов в пути, указав путь к библиотеке в формате DOS "8.3".

Чтобы получить форму 8.3, выполните (в командной строке):

DIR /AD /X

рекурсивно через каждый уровень каталогов.

0 голосов
/ 24 июня 2011

Возможно, у вас проблема с оборудованием.

У меня была такая же проблема на моей старой системе (процессор 1800 МГц AMD, 1 ГБ ОЗУ, Windows 7 Ultimate), пока я не изменил 2x 512 МБ ОЗУ на 2x 1 ГБ ОЗУ, С тех пор не было никаких проблем. Также исчезли другие (незначительные) проблемы. Думаю, эти два модуля по 512 МБ не очень понравились друг другу, потому что 2x 512 МБ + 1 ГБ или 1x 512 МБ + 2x 1 ГБ тоже не работали должным образом.

0 голосов
/ 08 мая 2019

Я нашел другое решение для этого ...

На самом деле, я пропустил разделитель запятых между двумя путями библиотеки.После добавления общего он работал для меня.

Перейти к: Project properties -> Linker -> General -> Link Library Dependencies По этому пути убедитесь, что путь к библиотеке правильный.

Предыдущий код ( С ошибкой - потому что я забыл разделить два пути lib запятой):

<Link><AdditionalLibraryDirectories>..\..\Build\lib\$(Configuration)**..\..\Build\Release;**%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

Код после исправления (просто разделяйте библиотеки запятыми):

<Link><AdditionalLibraryDirectories>..\..\Build\lib\$(Configuration)**;..\..\Build\Release;**%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

Надеюсь, это поможет вам.

0 голосов
/ 10 мая 2019

В моем случае у меня была установлена ​​библиотека с использованием пакета NuGet (cpprestsdk), и я ошибочно добавил библиотеку к дополнительным зависимостям в настройках компоновщика. Оказывается, пакет делает все за вас.

Затем компоновщик попытался найти библиотеку в пути к библиотеке и, конечно, не смог ее найти.

После удаления библиотеки из дополнительных зависимостей все скомпилировалось и связывалось нормально.

0 голосов
/ 19 августа 2013

Я создал каталог bin на уровне project_dir, затем создал каталог release/debug внутри папки bin, что решило проблему для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...