crossplatform.ru

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


  Ответ в b2 and static link boost
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Iron Bug Дата 10.6.2017, 2:12
  так может у тебя ещё в дистрибе буст установлен, другой версии и с другими настройками? может, его колбасит от смеси хэдеров и конфигов?
alexy Дата 9.6.2017, 23:04
  вобщм у меня получается только если сделаю так:
в 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 Дата 8.6.2017, 22:57
  попробуй полностью очистить буст и пересобрать его с флагом link=static.
хотя filesystem - очень тяжёлая библиотека и там может и не быть статики. она завязана на многие системные вещи и скорее всего тащит за собой thread.
alexy Дата 8.6.2017, 21:34
  в 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 Дата 7.6.2017, 22:11
  насчёт статической и динамической линковки буста, скорее всего, у тебя в /boost/config/user.hpp раскомментирован дефайн #define BOOST_ALL_DYN_LINK. а в своём проекте ты пытаешься линковать статически.
вообще, не все вещи можно линковать статически, но если утебя hеader-only библиотеки, то это должно работать, если закомментировать дефайн динамика.
остальные дефайны в user.hpp тоже можешь проверить. они используются по умолчанию, если ты не задал свой конфиг для проекта.
ещё можно посмотреть всякие там user-config.jam, если они имеются.

про статик правильно. но не все библиотеки могут быть вкомпилены статически (например, использование NSS). во-вторых, статика не рекомендуется, потому что может вызывать проблемы с безопасностью (в библиотеке нашли и пофиксили баг, а ты свой бинарь должен будешь перекомпилировать сам). так что не всегда имеет смысл компилить статически. это довольно узкий круг задач.
alexy Дата 7.6.2017, 21:02
  начал изучать 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 ?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 22:55