Как заставить Boost использовать rpath? - PullRequest
9 голосов
/ 07 августа 2010

Мне нужно построить Boost вне «обычного» дерева каталогов (т. Е. /custom/dir вместо /usr), что не составляет особой проблемы: просто передайте --prefix=/custom/path в ./runscript.sh / ./bjamи вот, пожалуйста.

Или я так подумал.

Проблема в том, что некоторые библиотеки Boost зависят друг от друга и - при использовании процесса сборки по умолчанию, проходящего через ./bootstrap.sh /./bjam - похоже, что путь --prefix не добавлен в путь поиска библиотеки для библиотек Boost, т.е. -Wl,-rpath не применяется.Это означает, что библиотеки Boost, зависящие от других библиотек Boost, не могут найти их во время выполнения.

Мое приложение - связывание этих библиотек /custom/path Boost - уже завершается ошибкой на этапе ./configure, поскольку libboost_filesystem.so не может найти libboost_system.so,, хотя я передал -Wl,-rpath=/custom/path/boost/lib своей собственной строке компилятора (т. Е. Правильный путь к библиотекам Boost, я дважды проверил, что libboost_system.so есть).

Теперь, чтобы избежатьтакие сложные методы, как установка LD_LIBRARY_PATH, я бы хотел собрать Boost таким образом, чтобы все библиотеки Boost имели правильный путь поиска для других библиотек Boost, скомпилированных в них.Однако я не смог найти подходящую процедуру для этого.Кто-нибудь может мне помочь?

Ответы [ 2 ]

6 голосов
/ 26 апреля 2018

Мне нужно было сделать это недавно для другого проекта, хотя мне нужно было использовать $ ORIGIN, чтобы указать путь относительно расположения общих объектов boost.

Для этого требовалось следующее в командной строке bash:

./b2 hardcode-dll-paths=true dll-path="'\$ORIGIN/../lib'" --prefix=$MY_PREFIX install

Определение волшебной коллекции символов для правильного размещения $ ORIGIN в общем объекте потребовало некоторых проб и ошибок, поэтому я надеюсь, что написание ответа поможет другим избежать этой проблемы.

6 голосов
/ 08 августа 2010

Вы можете добавить параметры компилятора и ссылки во время сборки из командной строки с помощью:

bjam hard-code-dll-path=true dll-path=/custom/path

В документации Boost Build есть пункт с часто задаваемыми вопросами (см. Документы B2 ).

...