фатальна помилка LNK1104: не вдається відкрити файл 'libboost_system-vc110-mt-gd-1_51.lib'


88

Здається, я не можу змусити це працювати. Я зробив простий консольний додаток (який залежить від 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
Я зміг створити файл libboost_system-vc110-mt-gd-1_51.lib, виконуючи повну збірку з bjam, однак я все ще отримую помилку.
Rushino

22
Відкрийте VS2012 developer command prompt, перейдіть до кореневого каталогу та типу boost bootstrap, а потім введіть, b2і ви повинні отримати повний набір бібліотечних файлів.
Jesse Good

Ви додали до свого проекту шляхи включення та шляхи компонування?
Джессі Гуд,

1
Ви створюєте свою програму /MD?
Махеш,

Якщо можна завантажувати замість компіляції, дістаньте
gorogm

Відповіді:


93

Параметр C ++ → Загальне → Додаткові каталоги включення призначений для переліку каталогів, де компілятор шукатиме файли заголовків.

Вам потрібно сказати лінкеру, де шукати бібліотеки для посилання. Щоб отримати доступ до цього налаштування, клацніть правою кнопкою миші на назві проекту у вікні Solution Explorer , а потім виберіть Властивості → Пов’язувач → Загальне → Додаткові бібліотечні каталоги . Введіть <boost_path>\stage\libсюди (це шлях, де знаходяться бібліотеки, якщо ви створюєте Boost, використовуючи параметри за замовчуванням).


можеш пояснити мені, що таке boost_path
ggsmartboy

1
@ggsmartboy Це шлях, де знаходяться вихідні файли підсилення (той самий шлях, який ви вказали в компіляторі, включає шляхи, щоб він міг знайти заголовки підсилення). Відповідь передбачає, що ви побудували прискорення самостійно (не використовуючи розподіл), використовуючи параметри побудови за замовчуванням.
преторіанський

Приголомшливо Врятував і мені справжній головний біль. Чому я здавався не в змозі помітити це в документації про посилення (якщо вона навіть є), я не знаю! :)
absentmindeduk

2
Параметри, про які йдеться у цій відповіді, знайдуться, якщо ви клацнете правою кнопкою миші на проекті та виберете властивості (для таких користувачів, як я, клацніть правою кнопкою миші рішення, перейдіть до Інструменти> Параметри тощо). Однак ці параметри були відсутні у всіх моїх проектах). VS2013
Mr_and_Mrs_D

1
@Mr_and_Mrs_D Ви маєте рацію, я припустив, що читач знав цю частину. Оновлено.
Преторіан,

97

Це найпростіший спосіб для такого любителя, як я, який вивчає С ++ самостійно:

Спочатку розпакуйте бібліотеку підсилення в будь-який каталог на ваш вибір. Рекомендую 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 налаштування boost я натомість зробив: а) відкрийте підказку командного рядка як 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 вказує номер версії компілятора в імена вихідних файлів.
Преторіан

Ви маєте рацію, і я знаю. Я боюся того, що може статися, якщо я оновлю бібліотеки та компілятор. Тож, коли проект буде закінчений, я все це виправлю. Дякую!
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.

Я намагався використовувати (і створив) динамічні бібліотеки підвищення (.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-> Загальні-> platformTooset), а не v110 як visual c ++ 2012. Тож я завантажив boost_1_55_0-msvc-10.0-32.exe, і зараз все нормально.


2

Якщо у вас виникли проблеми зі створенням посилення або ви не хочете цього робити, альтернативою є завантаження файлів lib з SourceForge . Посилання призведе до папки із заархівованими файлами lib та dll версії 1.51. Але ви повинні мати можливість редагувати посилання, щоб вказати вибрану версію. Очевидно, у установника з BoostPro є деякі проблеми.


2

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

фатальна помилка LNK1104: libboost_unit_test_framework-vc140-mt-1_57

тож я подумав поділитися своїм рішенням.

Ви можете створити проект підсилення модульного тестування двома способами (і це рішення працює для обох):

  1. за допомогою адаптера Boost Unit Test
  2. або створивши консольну програму Win32 ( кроки тут ) і замінивши основну функцію функцією модульного тестування підсилення ( кроки тут ).

Ось кроки, якими я керувався, щоб обидва проекти запрацювали:

Спочатку завантажте потрібну версію 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 threadading = 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 ++> Додатковий каталог включень "
    • та " Linker> Додаткові каталоги бібліотек ".

1

b2 -j% ядер% набору інструментів =% msvcver% address-model = 64 архітектура = x86 link = статична різьба = 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.