Boost: хотя скомпилирован, отсутствует библиотека

Я скомпилировал Boost и использую его в проекте Visual C++. В какой-то момент я начал получать следующую ошибку:

1>LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc100-mt-sgd-1_45.lib'

Насколько я знаю, у меня правильно настроена конфигурация компоновщика. Я искал библиотеку и нашел несколько близких совпадений:

$(LIB_BOOST)\stage\lib\libboost_filesystem-vc100-mt-gd-1_45.lib
$(LIB_BOOST)\stage\lib\libboost_filesystem-vc100-mt-gd.lib
$(LIB_BOOST)\stage\lib\libboost_filesystem-vc100-mt-1_45.lib
$(LIB_BOOST)\stage\lib\libboost_filesystem-vc100-mt.lib
$(LIB_BOOST)\bin.v2\libs\filesystem\build\msvc-10.0\release\link-static\threading-multi\libboost_filesystem-vc100-mt-1_45.lib
$(LIB_BOOST)\bin.v2\libs\filesystem\build\msvc-10.0\debug\link-static\threading-multi\libboost_filesystem-vc100-mt-gd-1_45.lib

(Обратите внимание на пропущенную букву «s» в большинстве из них)

Что означает отсутствующая буква «s»? Что означают эти похожие, но разные библиотеки? Почему я пропустил это, хотя я скомпилировал весь Boost?


person Jonathan    schedule 09.01.2011    source источник


Ответы (2)


's' является одним из тегов ABI

Тег ABI: кодирует детали, влияющие на совместимость библиотеки с другим скомпилированным кодом. Для каждой такой функции в тег добавляется одна буква:

    Key     Use this library when:
    s   linking statically to the C++ standard library and compiler runtime support libraries.
    g   using debug versions of the standard and runtime support libraries.
    y   using a special debug build of Python.
    d   building a debug version of your code.7
    p   using the STLPort standard library rather than the default one supplied with your compiler.
    n   using STLPort's deprecated “native iostreams” feature.8

Например, если вы создаете отладочную версию своего кода для использования с отладочными версиями статической библиотеки времени выполнения и стандартной библиотеки STLPort в режиме «собственных потоков ввода-вывода», тег будет выглядеть так: -sgdpn. Если ничего из вышеперечисленного не применимо, тег ABI опускается.

person Community    schedule 09.01.2011
comment
Следуя вашему указателю, я переустановил Boost с помощью установщика BoostPro. Я решил установить как статический\отладочный\многопоточный, так и статический\многопоточный. Действительно, после этого я не скучал по библиотеке. - person Jonathan; 09.01.2011
comment
@Jonathan: если вы создадите библиотеки повышения с параметром --build-type=complete, тогда будут собраны все поддерживаемые варианты. См. раздел 5.3.4 Вызов bjam в boost. org/doc/libs/1_45_0/more/getting_started/ - person yasouser; 10.01.2011

Я добавил параметр командной строки: runtime-link=shared,static Включает отсутствующие файлы s.

Надеюсь, поможет

person magogarduno    schedule 03.01.2012