Фатальная ошибка LNK1104: невозможно открыть файл 'libboost_system-vc110-mt-gd-1_51.lib'
Похоже, я не могу заставить это работать. Я сделал простое консольное приложение (которое зависит от библиотеки websocket++
), которым нужны библиотеки Boost
. Но когда я пытаюсь скомпилировать, я получаю:
фатальная ошибка LNK1104: невозможно открыть файл 'libboost_system-vc110-mt-gd-1_51.lib'
Однако я сделал bjam, который создал lib в (boost_root)/stage/libs
, и я связал путь к libs с компилятором C++/Additionnals includes
.
Если я смотрю в (boost_root)/stage/libs
, файл libboost_system-vc110-mt-gd-1_51.lib
не существует. Вместо этого он называется libboost_system-vc110-mt-sgd-1_51.lib
.
Любая идея?
Ответы
Ответ 1
Параметр С++ → General → Additional Include Directories предназначен для перечисления каталогов, в которых компилятор будет искать файлы заголовков.
Вам нужно сообщить компоновщику, где искать библиотеки для ссылки. Чтобы получить доступ к этому параметру, щелкните правой кнопкой мыши имя проекта в окне "Обозреватель решений", затем "Свойства" → "Линкера" → "Общие" → "Дополнительные каталоги библиотек". Введите <boost_path>\stage\lib
здесь (это путь, где библиотеки находятся, если вы build Boost, используя параметры по умолчанию).
Ответ 2
Это самый простой способ для такого любителя, как я, который сам изучает C++:
Сначала распакуйте библиотеку boost в любой каталог по вашему выбору. Я рекомендую c:\directory
.
- Откройте визуальный С++.
- Создайте новый проект.
- Щелкните правой кнопкой мыши проект.
- Нажмите на свойство.
- Нажмите C/С++.
- Нажмите на общий.
- Выберите дополнительную библиотеку.
- Включить назначение библиотеки. например
c:\boost_1_57_0
.
- Нажмите заголовок предварительного компилятора.
- Нажмите, чтобы создать/использовать предварительно скомпилированный заголовок.
- Выберите не использовать предварительно скомпилированный заголовок.
Затем перейдите в библиотеку ссылок, если у вас возникли проблемы.
- Перейти к файлу, который был извлечен, был
c:\boost_1_57_0
.
- Нажмите
booststrap.bat
(не утруждайтесь типом в окне командной строки, просто подождите и не закрывайте окно, в котором у меня была моя проблема, и мне потребовалось две недели, чтобы решить. Через некоторое время booststrap
будет запускать и создавать тот же файл, но теперь с двумя разными именами: b2
и bjam
.
- Нажмите
b2
и подождите, пока он запустится.
- Нажмите
bjam
и подождите, пока он запустится. Затем будет создаваться папка под названием stage
.
- Щелкните правой кнопкой мыши проект.
- Нажмите на свойство.
- Нажмите на ссылку.
- Нажмите на общий.
- Нажмите на дополнительный каталог библиотеки.
- Выберите часть библиотеки, например.
c:\boost_1_57_0\stage\lib
.
И тебе хорошо идти!
Ответ 3
У меня была та же проблема. Это было вызвано тем, что я скомпилировал Boost с Visual С++ 2010 (v100), и я попытался использовать библиотеку с Visual Studio 2012 (v110) по ошибке.
Итак, я изменил конфигурации (в Visual Studio 2012), перейдя в свойства Project → General → Plataform Toolset и изменив значение из Visual Studio 2012 (v110) на Visual Studio 2010 (v100).
Ответ 4
Еще одно решение:
Я был в тупик, потому что я включил boost_regex-vc120-mt-gd-1_58.lib в свой ресурс Link- > Additional Dependencies, но ссылка продолжала говорить мне, что не может открыть libboost_regex-vc120-mt-gd-1_58.lib(обратите внимание на префикс lib). Я не указывал libboost_regex-vc120-mt-gd-1_58.lib.
Я пытался использовать (и создал) динамические библиотеки boost (.dlls), но не имел определяемого макроса BOOST_ALL_DYN_LINK. По-видимому, в компиляции есть подсказки для включения библиотеки, и без BOOST_ALL_DYN_LINK он ищет статическую библиотеку (с префиксом lib), а не динамическую библиотеку (без префикса lib).
Ответ 5
У меня была такая же проблема, и я ошибся в том, что я установил двоичный файл boost_1_55_0-msvc-11.0-32.exe для использования с visual С++ 2010, который имеет версию v100 (свойства проекта → ConfiguratioProperties- > General- > platformTooset ) не v110 как visual С++ 2012. Поэтому я загрузил boost_1_55_0-msvc-10.0-32.exe, и теперь все в порядке.
Ответ 6
Если у вас возникли проблемы с форсированием или предпочитают не делать этого, альтернативой является загрузка файлов lib из SourceForge. Ссылка приведет вас к папке zipped lib и dll файлов для версии 1.51. Но вы должны иметь возможность редактировать ссылку, чтобы указать версию выбора. По-видимому, у установщика BoostPro есть некоторые проблемы.
Ответ 7
У меня была аналогичная проблема при попытке использовать тестирование boost unit в Visual Studio 2015 (Community Edition):
фатальная ошибка LNK1104: libboost_unit_test_framework-vc140-mt-1_57
поэтому я решил поделиться своим решением.
Вы можете создать проект тестирования модуля повышения мощности двумя способами (и это решение работает для обоих):
Вот шаги, которые я выполнил, чтобы оба проекта работали:
Сначала загрузите желаемую версию boost (например, boost_1_57_0). Вы можете либо загрузить boost с помощью правильных двоичных файлов (скомпилированных с использованием msvc v140), либо сами извлечь из них двоичные файлы, выполнив следующие команды из командной строки:
- bootstrap.bat
- "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
- bjam --clean
- bjam -j4 --debug-symbols = on --build-type = complete toolset = msvc-14.0 threading = multi runtime-link = shared
адрес-модель = 32
Где msvc-14.0 указывает, что нам нужна версия Visual Studio 2015 (VS 2015 = v14.0 = v140), а address-model = 32 указывает, что мы требуется платформа 32 (но то же самое можно сделать для 64 бит).
Как только у вас есть двоичные файлы, перейдите в Visual Studio, выберите проект Boost Unit Testing, который вы создали. Перейдите в Свойства проектa > Конфигурация (из главного меню) и сделайте следующие варианты:
-
Установите " Общие > Набор инструментов для платформы" в Visual Studio 2015 (v140).
-
Включите путь к папке boost (например, C:\boost_1_57_0) и путь к подпапке, содержащей двоичные файлы (например, C:\boost_1_57_0\stage\lib) в:
- " C\С++ > Дополнительный каталог Include"
- и компоновщик > Дополнительные каталоги библиотек ".
Ответ 8
У меня была такая же проблема.
Я решил проблему перемещения mainTest.cpp из подпапки src/mainTest/в главную папку src/
Думаю, это была твоя проблема.
Ответ 9
2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib
В моем случае bootstrap/bjam не был доступен (библиотеки были предварительно скомпилированы и переданы SCM) в старый унаследованный проект. У библиотек не было версий VC или BOOST в именах файлов, например: libboost_regex-mt-sgd.lib
, однако Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.lib
как-то срабатывал автоматически.
Исправлено добавлением имени файла, отличного от версии, с помощью:
<AdditionalDependencies>$(DK_BOOST)\lib64\libboost_regex-mt-sgd.lib</AdditionalDependencies>
и черный список ...vc120-mt-sgd-1_55.lib
в
<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
Ответ 10
b2 -j% cores% toolset =% msvcver% address-model = 64 архитектура = ссылка x86 = статическая многопоточность = multi-runtime-link = общая - тип сборки = минимальный этап --stagedir = этап /x64
Свойства → Линкер → Общие → Дополнительные каталоги библиотек $ (BOOST)\stage ** x64 **\lib