Ошибка компоновщика 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.

  1. Когда я собираю x с типом конфигурации = Статическая библиотека и RuntimeLibrary= Многопоточность (/MT), это нормально.
  2. Когда я собираю 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++, поэтому существует несоответствие. Попробуйте динамически связать ваш код со стандартными библиотеками. (Настройки проекта-> Общие-> Тип конфигурации)

Другие вопросы по тегам