Ошибка компоновщика LNK1104 с 'libboost_filesystem-vc100-mt-s-1_49.lib'
В процессе связывания моей программы с модулем boost::filesystem в режиме выпуска я получаю следующую ошибку:
ошибка LNK1104: не удается открыть файл 'libboost_filesystem-vc100-mt-s-1_49.lib'
Однако в каталоге boost\stage\lib у меня есть только следующие библиотеки, относящиеся к модулю файловой системы:
libboost_filesystem-VC100-мт-1_49.lib
libboost_filesystem-VC100-мт-Г.Д.-1_49.lib
Мои вопросы:
Почему VC++ запрашивает libboost_filesystem-vc100-mt-s-1_49.lib?
Какие свойства компилятора / компоновщика следует изменить, чтобы компилятор запрашивал libboost_filesystem-vc100-mt-1_49.lib?
ОБНОВЛЕНИЕ: В моем решении VC2010++ есть 2 проекта, которые включают в себя предыдущую библиотеку наддува: x - это библиотека, а y (основная программа) - для вызова x.
- Когда я собираю x с типом конфигурации = Статическая библиотека и RuntimeLibrary= Многопоточность (/MT), это нормально.
- Когда я собираю y с Конфигурацией типа = Приложение (.exe) и RuntimeLibrary= Многопоточность (/MT), он выдает ошибку, которую я указал, если я изменяю на Конфигурацию типа = Статическая библиотека, она строится нормально, но моя основная программа имеет. Расширение lib, а не ожидаемый.exe.
5 ответов
Вы используете параметр /MT или /MTd в C/C++/Code Generation/Runtime Library
которые требуют статической библиотеки, улучшите сборку по умолчанию с помощью вывода общей библиотеки. Вы можете переключиться Runtime Library
в /MD или /MDd. Другой вариант - перекомпилировать надстройку со статическим выводом библиотеки, и вы получите 'libboost_filesystem-vc100-mt-s-1_49.lib'..
У меня была похожая проблема с недавним проектом (унаследованным от долгого наследия).
Вот решение этой проблемы для "бедняков":
Перестройте библиотеки boost со всеми вариантами, чтобы убедиться, что у вас есть правильный вариант для ваших нужд.
Бежать:
.\b2 --build-type=complete
Обратите внимание, что с этой опцией время создания ускорения, очевидно, будет больше.
Это не элегантное решение, но у меня не было времени, чтобы выяснить, какой именно вариант мне нужен для моего проекта, поэтому я просто собрал их все.
Вы можете вставить следующие символы в консоль управления (win+r----cmd, затем перейти в каталог boost src, найти bjam.exe) ps: дважды щелкните на bootstrap.bat, чтобы получить bjam.exe.
bjam --toolset=msvc-1.0 --stagedir=./lib_x64 --builddir=./ address-model=32 link=static variant=release runtime-link=static threading=multi stage debug releasde
libboost_filesystem-vc100-mt-s-1_49.lib
"link=static" correspond to -s-
"threading=multi" correspond to -mt-
"runtime-link=static" correspond to lib prefix
"variant=release" make sure libboost_filesystem-vc100-mt-s-1_49.lib don't contain -gd-
Выполните команду ниже, чтобы перестроить boost в static-режиме в командной строке VS2013 x86 Native Tools.
b2 -link=static
Добавьте пути к вашей библиотеке компоновщика в путь ссылки вашего проекта в VS. Затем перестройте свой проект, ошибка исчезла.
Расширенные библиотеки, которые у вас есть в вашем boost\stage\lib directory
динамически связаны со стандартными библиотеками C++. Смотрите следующий пост:
повысить вариации конфигурации lib lib
Ваш код статически связывается со стандартными библиотеками C++, поэтому существует несоответствие. Попробуйте динамически связать ваш код со стандартными библиотеками. (Настройки проекта-> Общие-> Тип конфигурации)