Как заставить Boost использовать rpath?

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

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам