Building Boost на Linux - имена библиотек

Я пытаюсь создать приложение, которое зависит от Boost. Поэтому я загрузил Boost 1_41_0 в свой Linux-блок и выполнил инструкции, найденные на сайте Boost для Unix-вариантов, http://www.boost.org/doc/libs/1_41_0/more/getting_started/unix-variants.html.

Они в основном предполагают, что я запускаю. /bjam install, что и сделал. Конструкция выполнена успешно. Однако имена библиотек, похоже, не соответствуют соглашению об именах Boost, описанному как в приведенной выше документации, так и в том, что указано в make файле приложения, которое я пытаюсь создать.

Я заметил, что есть множество опций, которые я могу указать на bjam, и я пытался играть с ними, но, несмотря ни на что, я не могу понять, что это правда. Я понимаю, что библиотеки должны войти в каталог $BOOST_ROOT/lib. Здесь отображаются библиотеки, но они называются:

libboost_thread.a
libboost_thread.so
libboost_thread.so.1.41.0

Я ожидаю, что их будут называть libboost_thread-gcc41-mt-d-1_41_0 или что-то подобное.

Я попытался. /bjam --build-type = complete --layout = tagged, и я вижу:

libboost_thread.a
libboost_thread-mt.a
libboost_thread-mt-d.a
libboost_thread-mt-d.so
libboost_thread-mt-d.so.1.41.0
libboost_thread-mt-s.a
libboost_thread-mt-sd.a
libboost_thread-mt.so
libboost_thread-mt.so.1.41.0
libboost_thread.so
libboost_thread.so.1.41.0

Итак, я не уверен, должен ли я просто создать сцену для моего каталога -L? Есть ли какая-либо документация, которая описывает это более подробно?

Ответ 1

Имена были изменены в 1.40.0 - см. примечания к выпуску:

Система сборки

Именование библиотек по умолчанию Совместимая с Unix среда системных соглашений и не включают различные украшения.

Они, вероятно, забыли обновить эту часть в документации по сборке.

Ответ 2

Здесь есть две переменные. Сначала это "установить" и "этап" (по умолчанию). "установить" копирует обе библиотеки и заголовки в каталог -/usr/local по умолчанию, и вы можете удалить исходное дерево. "stage" помещает библиотеки в "stage/lib", и вы должны добавить флаги "-L/stage/lib -I".

Вторым является --layout = versioned и --layout = system. Похоже, вы обнаружили, что они уже делают, и действительно, система по умолчанию с 1.40. В руководстве по началу работы не упоминается об этом, и я добавил элемент действия для его обновления. В идеале вы должны поговорить с авторами приложения, чтобы использовать системное имя для библиотек boost. Если это невозможно, то единственным вариантом является создание с --layout = versioned.

Ответ 3

В документации Boost на http://www.boost.org/doc/libs/1_35_0/more/getting_started/windows.html#library-naming соглашение:

-mt Тематический тег: указывает, что библиотека была построена с поддержкой многопоточности. Библиотеки, построенные без поддержки многопоточности, могут быть идентифицированы отсутствием -mt.

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

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.
p   using the STLPort standard library rather than the default one supplied with your compiler.
n   using STLPort deprecated "native iostreams" feature.

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