crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> 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 выглядит так
project psignals
  : requirements <include>src
;

lib psignals
  : [ glob src/*.cpp ]
  : <threading>multi <use>/boost
;
в ~/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 проекта указываю
import /boost;
boost.user-project;

lib psignals
    : [ glob src/*.cpp ]
    : <threading>multi
      <use>/boost//system/<link>static
  ;
похоже на какой-то костыль: тяну чтог-то ненужное чтобы подтянуть что-то другое.
я пробовал указать просто <use>/boost, но так не выходит: почему-то начинает компилится весь буст, и обламывается. там в документации написано что <use> используется для как раз того, чтобы подключить header-only билиотеки. может там ошибка какая?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 10.6.2017, 2:12
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


так может у тебя ещё в дистрибе буст установлен, другой версии и с другими настройками? может, его колбасит от смеси хэдеров и конфигов?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 22:21