Ошибка компоновщика LNK1104 с 'libboost_filesystem-vc100-mt-s-1_49.lib'
В процессе связывания моей программы с модулем boost:: filesystem в режиме освобождения я получаю следующую ошибку:
ошибка LNK1104: невозможно открыть файл 'Libboost_filesystem-VC100-т-ы-1_49.lib'
Однако в каталоге boost\stage\lib у меня есть только следующие библиотеки, относящиеся к модулю файловой системы:
libboost_filesystem-VC100-т-1_49.lib
libboost_filesystem-VC100-т-Г.Д.-1_49.lib
Мои вопросы:
Почему VС++ запрашивает 'libboost_filesystem-vc100-mt-s-1_49.lib?
Какие свойства компилятора/связывания следует изменить, чтобы заставить компилятор запросить libboost_filesystem-vc100-mt-1_49.lib?
UPDATE: у моего решения VC2010 ++ есть 2 проекта, которые включают в себя предыдущую библиотеку boost: x - это библиотека и y (основная программа), которая вызывает x.
- Когда я создаю x с типом конфигурации = статическая библиотека и RuntimeLibrary = многопотоковая (/MT), это нормально.
- Когда я создаю y с типом конфигурации = Application (.exe) и RuntimeLibrary = Multi-threaded (/MT), он выдает указанную ошибку, если я перехожу к типу конфигурации = статическая библиотека, она строит нормально, но моя основная программа имеет расширение .lib, а не ожидаемый .exe.
Ответы
Ответ 1
Вы используете опцию /MT или/MTd в C/C++/Code Generation/Runtime Library
, которая требует статической библиотеки, форматирует сборку по умолчанию с выходом общей библиотеки. Вы можете переключить Runtime Library
на /MD или/MDd. Другой вариант - перекомпиляция с помощью статического библиотечного вывода, и вы получите "libboost_filesystem-vc100-mt-s-1_49.lib"..
Ответ 2
У меня была аналогичная проблема с недавним проектом (унаследованным от длительного наследия).
Вот решение "бедных" по этой проблеме:
Восстановите библиотеки ускорения с помощью вариантов all, чтобы убедиться, что у вас есть правильный вариант для ваших нужд.
Запуск:
.\b2 --build-type=complete
Обратите внимание, что время форсирования, очевидно, будет больше с этой опцией.
Это не изящное решение, но у меня не было времени обсуждать, какой именно вариант мне нужен для моего проекта, поэтому я просто создал их все.
Ответ 3
Вы можете вставить следующие символы в консоль управления (win + r ---- cmd, затем перейдите в каталог 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-
Ответ 4
Библиотеки ускорения, которые у вас есть в boost\stage\lib directory
, динамически связаны с стандартными библиотеками С++. См. Следующее сообщение:
увеличить конфигурации конфигурации lib build
Ваш код связывается статически со стандартными библиотеками С++, следовательно, является несоответствием. Попробуйте динамически связывать свой код со стандартными библиотеками. (Настройки проекта → Общие → Тип конфигурации)
Ответ 5
выполните команду ниже, чтобы перестроить boost в static в VS2013. Команда командной строки x86.
b2 -link=static
Добавьте свои пути библиотеки библиотек в свой путь к ссылке на проект в VS.
Затем перестройте свой проект, ошибка исчезла.