фатальная ошибка LNK1104: невозможно открыть файл libboost_system-vc110-mt-gd-1_51.lib


88

Кажется, я не могу заставить это работать. Я сделал простое консольное приложение (которое зависит от websocket++библиотеки), которому нужны Boostбиблиотеки ... но когда я пытаюсь скомпилировать, я получаю:

фатальная ошибка LNK1104: невозможно открыть файл libboost_system-vc110-mt-gd-1_51.lib

Однако я сделал bjam, который создал библиотеку, (boost_root)/stage/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
Мне удалось создать файл libboost_system-vc110-mt-gd-1_51.lib, выполнив полную сборку с помощью bjam, однако я все еще получаю ошибку.
— Рушино

22
Откройте VS2012 developer command prompt, перейдите в корневой каталог boost и введите bootstrap, а затем введите, b2и вы должны получить полный набор файлов библиотеки.
— Джесси Гуд,

Вы добавили в проект пути включения и пути компоновщика?
— Джесси Гуд,

1
Вы создаете свое приложение с помощью /MD?
— Махеш

Если можно скачать вместо компиляции, скачайте
— библиотеки

Ответы:


93

Параметр C ++ → General → Additional Include Directories предназначен для перечисления каталогов, в которых компилятор будет искать файлы заголовков.

Вам нужно указать компоновщику, где искать библиотеки для ссылки. Чтобы получить доступ к этому параметру, щелкните правой кнопкой мыши имя проекта в окне обозревателя решений , затем выберите Свойства → Компоновщик → Общие → Дополнительные каталоги библиотек . Введите <boost_path>\stage\libсюда (это путь, по которому расположены библиотеки, если вы собираете Boost с параметрами по умолчанию).


Можете
— ли

1
@ggsmartboy Это путь к исходным файлам повышения (тот же путь, который вы указываете в компиляторе, включает пути, чтобы он мог найти заголовки повышения). Ответ предполагает, что вы создали Boost самостоятельно (не используя дистрибутив), используя параметры сборки по умолчанию.
— Преторианец,

Потрясающие. Также избавил меня от настоящей головной боли. Я не знаю, почему я не смог найти это в документации по бусту (если она вообще есть)! :)
— absentmindeduk

2
Параметры, упомянутые в этом ответе, можно найти, если щелкнуть проект правой кнопкой мыши и выбрать свойства (для таких новичков, как я, щелкнуть правой кнопкой мыши решение, перейти в Инструменты> Параметры и т. Д. Эти параметры не присутствовали во всех моих проектах). VS2013
— Mr_and_Mrs_D

1
@Mr_and_Mrs_D Вы правы, я предполагал, что читатель знает эту часть. Обновлено.
— Praetorian

97

Это самый простой способ для такого любителя, как я, который самостоятельно изучает C ++:

Сначала разархивируйте библиотеку boost в любой каталог по вашему выбору. Рекомендую c:\directory.

  1. Откройте свой визуальный C ++.
  2. Создайте новый проект.
  3. Щелкните проект правой кнопкой мыши.
  4. Щелкните свойство.
  5. Щелкните C / C ++.
  6. Щелкните "Общие".
  7. Выберите дополнительную включаемую библиотеку.
  8. Включите место назначения библиотеки. напр c:\boost_1_57_0.
  9. Щелкните заголовок прекомпилятора.
  10. Нажмите на создать / использовать предварительно скомпилированный заголовок.
  11. Выберите не использовать предварительно скомпилированный заголовок.

Затем перейдите в библиотеку ссылок, если у вас возникли проблемы.

  1. Перейти к тому, где был извлеченный файл c:\boost_1_57_0.
  2. Нажмите booststrap.bat(не пытайтесь вводить текст в командном окне, просто подождите и не закрывайте окно, в котором у меня возникла проблема, решение которой заняло у меня две недели. Через некоторое время программа booststrapзапустится и создаст тот же файл, но теперь с двумя разными именами:, b2и bjam.
  3. Нажмите b2и подождите, пока он запустится.
  4. Нажмите bjamи подождите, пока он запустится. Тогда будет производиться папка с именем stage.
  5. Щелкните проект правой кнопкой мыши.
  6. Щелкните свойство.
  7. Щелкните ссылку.
  8. Щелкните "Общие".
  9. Щелкните включить дополнительную библиотеку.
  10. Выберите часть библиотеки, например c:\boost_1_57_0\stage\lib.

И вам хорошо!


3
Большое спасибо, Ву Цзе - я никогда раньше не делал ничего подобного, и эти шаги были именно тем, что мне нужно для создания Boost и создания недостающего файла библиотеки libboost_serialization-vc140-mt-gd-1_57.lib, у меня возникли проблемы с линковкой: )
— Vixxd

5
Спасибо, нравятся красивые подробные инструкции. На шаге 2/3/4 настройки ускорения я сделал следующее: а) открыл командную строку как root ; б) перейти в каталог boost_1_57_0; в) тип bootstrap.bat(прошло 10-20 секунд); г) введите ./b2в соответствии с инструкциями (на это ушло 30-40 минут).
— Даррен Кук

1
Мне пришлось открыть bootstrap.bat с помощью командной строки Visual Studio, поскольку обычная командная строка не знала, как обрабатывать команду cl.
— jlaverde

20.02.2018, у меня работает ваше решение (VS2017 + Boost 1.66). Огромное спасибо.
— CaTx

Спасибо за шаги для новичков. Я желаю, чтобы все всегда давали такие ответы, как вы.
— Mudit Jain

6

У меня такая же проблема. Это было вызвано тем, что я скомпилировал Boost с Visual C ++ 2010 (v100) и по ошибке попытался использовать библиотеку с Visual Studio 2012 (v110).

Итак, я изменил конфигурации (в Visual Studio 2012), перейдя в Свойства проекта -> Общие -> Набор инструментов Plataform, и изменил значение с Visual Studio 2012 (v110) на Visual Studio 2010 (v100) .


7
Надеюсь, вы понимаете, что, когда вы меняете набор инструментов платформы для использования v100, вы говорите IDE VS2012 использовать компилятор, поставляемый с VS2010. Любые функции C ++ 11, добавленные в компилятор VS2012, будут недоступны. Лучшее решение - скомпилировать Boost с помощью компилятора VS2012; у вас могут сосуществовать сгенерированные библиотеки как 2010, так и 2012 года, потому что Boost помещает номер версии компилятора в имена выходных файлов.
— Praetorian

Вы правы, и я в курсе. Боюсь, что может случиться, если я обновлю библиотеки и компилятор. Итак, когда проект будет завершен, я все это исправлю. Благодарность!
— Jota Santos

6

Еще одно решение:

Я был в тупике, потому что включал 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 (.dll), но не определил макрос BOOST_ALL_DYN_LINK. Очевидно, в компиляции есть подсказки для включения библиотеки, и без BOOST_ALL_DYN_LINK он ищет статическую библиотеку (с префиксом lib), а не динамическую библиотеку (без префикса lib).


По-прежнему только 1 голос, но я оказываюсь здесь каждые несколько месяцев, и мне снова напоминают, как решить мою проблему !!
— Нил

3

У меня была такая же проблема, и моя ошибка заключалась в том, что я установил двоичный файл boost_1_55_0-msvc-11.0-32.exe для использования с Visual C ++ 2010, который имеет версию v100 (свойства проекта-> ConfiguratioProperties-> General-> platformTooset), а не v110 как visual c ++ 2012. Я загрузил boost_1_55_0-msvc-10.0-32.exe, и теперь все в порядке.


2

Если у вас возникли проблемы со сборкой Boost или вы предпочитаете этого не делать, альтернативой является загрузка файлов библиотеки из SourceForge . По ссылке вы попадете в папку с заархивированными файлами lib и dll для версии 1.51. Но вы должны иметь возможность редактировать ссылку, чтобы указать версию по выбору. Видимо у установщика от BoostPro есть проблемы.


2

У меня была аналогичная проблема при попытке использовать ускоренное модульное тестирование в Visual Studio 2015 (Community Edition):

фатальная ошибка LNK1104: libboost_unit_test_framework-vc140-mt-1_57

поэтому я подумал, что поделюсь своим решением.

Вы можете создать проект ускоренного модульного тестирования двумя способами (и это решение работает для обоих):

  1. с помощью адаптера для тестирования Boost Unit
  2. или путем создания консольного приложения Win32 ( шаги здесь ) и замены основной функции на функцию модульного тестирования boost ( шаги здесь ).

Вот шаги, которые я выполнил, чтобы оба проекта заработали:

Сначала загрузите желаемую версию boost (например, boost_1_57_0 ). Вы можете либо загрузить boost с правильными двоичными файлами (скомпилированными с использованием msvc v140), либо извлечь двоичные файлы самостоятельно, выполнив следующие команды из командной строки:

  1. bootstrap.bat
  2. «C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat» x86
  3. bjam - чистый
  4. bjam -j4 --debug-symbols = on --build-type = complete toolset = msvc-14.0 threading = multi runtime-link = shared address-model = 32

Где msvc-14.0 указывает, что нам требуется версия Visual Studio 2015 (VS 2015 = v14.0 = v140), а address-model = 32 указывает, что нам требуется платформа 32 (но то же самое можно сделать для 64-разрядной версии).

Когда у вас есть двоичные файлы, перейдите в Visual Studio, выберите созданный вами проект Boost Unit Testing. Перейдите в Свойства проекта> конфигурация (из главного меню) и сделайте следующие варианты:

  • Установите « Общие> Набор инструментов платформы » на Visual Studio 2015 (v140).

  • Включите путь к папке boost (например, C: \ boost_1_57_0) и путь к подпапке, содержащей двоичные файлы (например, C: \ boost_1_57_0 \ stage \ lib) в:

    • " C \ C ++> Дополнительный каталог для включения "
    • и « Компоновщик> Дополнительные каталоги библиотек ».

1

b2 -j% cores% toolset =% msvcver% address-model = 64 architecture = x86 link = static threading = multi runtime-link = shared --build-type = minimal stage --stagedir = stage / x64

Свойства → Компоновщик → Общие → Дополнительные каталоги библиотек $ (BOOST) \ stage \ x64 \ lib


Более подробная информация о том, что делают эти строки и почему -> поможет улучшить качество этого ответа.
— Антон Меньшов

0

У меня здесь была такая же проблема. Я решил проблему, переместив mainTest.cpp из подпапки src / mainTest / в основную папку src /, думаю, это тоже была ваша проблема.


0

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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.