Ошибка компоновщика 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. Затем перестройте свой проект, ошибка исчезла.