b2 and static link boost |
Здравствуйте, гость ( Вход | Регистрация )
b2 and static link boost |
alexy |
7.6.2017, 21:02
Сообщение
#1
|
Студент Группа: Участник Сообщений: 44 Регистрация: 4.8.2010 Пользователь №: 1931 Спасибо сказали: 0 раз(а) Репутация: 0 |
начал изучать b2, мне понравился, реншил сделать на нем небольшую библиотеку. сейчас напиасл несколько функций в ней, пока использую только header only библиотеки из буста, потом понадобятся и другие, не header only.
сейчас мой jamroot.jam выглядит так в ~/user-config.jam указывается где лежит только что распакованный boost1.64у меня несколько вопросов: 1. при компиляции говторит # error Must not define both BOOST_SYSTEM_DYN_LINK and BOOST_SYSTEM_STATIC_LINK что выглядит логично. он и правда определяет оба дефайна. как так? 2. зачем-то начинают компилится бустовые потоки (также если не указывать, что <threading>multi). это в принцыпе не мешает, но хотелось быт понять почему. 3. я правильно понял, что достаточно указать в списке исходников библиотеку буста, например /boost//filesystem/<link>static , и получить вкомпилинную в мой so библиотеку filesystem.a собранную со флагом -fPIC ? |
|
|
Iron Bug |
7.6.2017, 22:11
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
насчёт статической и динамической линковки буста, скорее всего, у тебя в /boost/config/user.hpp раскомментирован дефайн #define BOOST_ALL_DYN_LINK. а в своём проекте ты пытаешься линковать статически.
вообще, не все вещи можно линковать статически, но если утебя hеader-only библиотеки, то это должно работать, если закомментировать дефайн динамика. остальные дефайны в user.hpp тоже можешь проверить. они используются по умолчанию, если ты не задал свой конфиг для проекта. ещё можно посмотреть всякие там user-config.jam, если они имеются. про статик правильно. но не все библиотеки могут быть вкомпилены статически (например, использование NSS). во-вторых, статика не рекомендуется, потому что может вызывать проблемы с безопасностью (в библиотеке нашли и пофиксили баг, а ты свой бинарь должен будешь перекомпилировать сам). так что не всегда имеет смысл компилить статически. это довольно узкий круг задач. |
|
|
alexy |
8.6.2017, 21:34
Сообщение
#3
|
Студент Группа: Участник Сообщений: 44 Регистрация: 4.8.2010 Пользователь №: 1931 Спасибо сказали: 0 раз(а) Репутация: 0 |
в user.hpp все строки закоментированы. в ~/user-config.jam оставил только строчку откуда брать исходники boost. не знаю влияет ли он на что-то, но user-config.jam, который лежит в примерах - тоже весь зкоментирован (без изменений после того, как скачал).
вот ошибки, которые у меня получились. там подсветил дефайны, которые делает b2. Раскрывающийся текст In file included from /home/fleonis/projects/psignals/support/boost_1_64_0/boost/system/error_code.hpp:14:0, from /home/fleonis/projects/psignals/support/boost_1_64_0/boost/filesystem/path_traits.hpp:23, from /home/fleonis/projects/psignals/support/boost_1_64_0/boost/filesystem/path.hpp:25, from /home/fleonis/projects/psignals/support/boost_1_64_0/boost/process/detail/traits/cmd_or_exe.hpp:14, from /home/fleonis/projects/psignals/support/boost_1_64_0/boost/process/detail/basic_cmd.hpp:13, from /home/fleonis/projects/psignals/support/boost_1_64_0/boost/process/args.hpp:33, from /home/fleonis/projects/psignals/support/boost_1_64_0/boost/process.hpp:22, from src/psignals.cpp:10: /home/fleonis/projects/psignals/support/boost_1_64_0/boost/system/config.hpp:34:3: ошибка: #error Must not define both BOOST_SYSTEM_DYN_LINK and BOOST_SYSTEM_STATIC_LINK # error Must not define both BOOST_SYSTEM_DYN_LINK and BOOST_SYSTEM_STATIC_LINK ^~~~~ "g++" -ftemplate-depth-128 -O0 -fno-inline -Wall -g -pthread -fPIC -Winvalid-pch -DBOOST_ATOMIC_DYN_LINK=1 -DBOOST_BUILD_PCH_ENABLED -DBOOST_CHRONO_DYN_LINK=1 -DBOOST_CHRONO_STATIC_LINK=1 -DBOOST_CONTAINER_DYN_LINK=1 -DBOOST_CONTEXT_DYN_LINK=1 -DBOOST_COROUTINES2_DYN_LINK=1 -DBOOST_COROUTINES_DYN_LINK=1 -DBOOST_DATE_TIME_DYN_LINK=1 -DBOOST_FIBERS_DYN_LINK=1 -DBOOST_FILESYSTEM_DYN_LINK=1 -DBOOST_IOSTREAMS_DYN_LINK=1 -DBOOST_LOCALE_NO_WINAPI_BACKEND=1 -DBOOST_LOCALE_WITH_ICONV=1 -DBOOST_LOG_DYN_LINK=1 -DBOOST_LOG_SETUP_DYN_LINK=1 -DBOOST_LOG_USE_AVX2 -DBOOST_LOG_USE_SSSE3 -DBOOST_PROGRAM_OPTIONS_DYN_LINK=1 -DBOOST_RANDOM_DYN_LINK -DBOOST_SYSTEM_DYN_LINK=1 -DBOOST_SYSTEM_NO_DEPRECATED -DBOOST_SYSTEM_STATIC_LINK=1 -DBOOST_TEST_DYN_LINK=1 -DBOOST_TEST_NO_AUTO_LINK=1 -DBOOST_THREAD_BUILD_DLL=1 -DBOOST_THREAD_POSIX -DBOOST_THREAD_USE_DLL=1 -DBOOST_TIMER_DYN_LINK=1 -DBOOST_TIMER_STATIC_LINK=1 -DBOOST_TYPE_ERASURE_DYN_LINK -DDATE_TIME_INLINE -I"/home/fleonis/projects/psignals/support/boost_1_64_0" -I"/usr/include/python3.5m" -I"src" -c -o "bin/gcc-7.0/debug/threading-multi/src/psignals.o" "src/psignals.cpp" |
|
|
Iron Bug |
8.6.2017, 22:57
Сообщение
#4
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
попробуй полностью очистить буст и пересобрать его с флагом link=static.
хотя filesystem - очень тяжёлая библиотека и там может и не быть статики. она завязана на многие системные вещи и скорее всего тащит за собой thread. |
|
|
alexy |
9.6.2017, 23:04
Сообщение
#5
|
Студент Группа: Участник Сообщений: 44 Регистрация: 4.8.2010 Пользователь №: 1931 Спасибо сказали: 0 раз(а) Репутация: 0 |
вобщм у меня получается только если сделаю так:
в usr-config указываю using boost : 1.64 : <root>/home/fleonis/projects/alien/boost/boost_1_64_0 ; в jamroot проекта указываю похоже на какой-то костыль: тяну чтог-то ненужное чтобы подтянуть что-то другое.я пробовал указать просто <use>/boost, но так не выходит: почему-то начинает компилится весь буст, и обламывается. там в документации написано что <use> используется для как раз того, чтобы подключить header-only билиотеки. может там ошибка какая? |
|
|
Iron Bug |
10.6.2017, 2:12
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
так может у тебя ещё в дистрибе буст установлен, другой версии и с другими настройками? может, его колбасит от смеси хэдеров и конфигов?
|
|
|
Текстовая версия | Сейчас: 25.11.2024, 3:10 |