CMAKE RPATH с упаковкой

Я создаю пакет с помощью cmake

У меня следующая структура

bin/
    bin1
lib/

    lib1
    lib2

Где lib1 и lib2 — внешняя динамическая библиотека. Как я могу установить RPATH, чтобы он автоматически связывался с lib1 и lib2?


person Vivek Goel    schedule 06.12.2011    source источник


Ответы (2)


Я тоже возился с cmake по этому поводу. Cmake использует CMAKE_SKIP_BUILD_RPATH для связывания во время сборки и CMAKE_INSTALL_RPATH для установки rpath, используемого при сборке цели установки. В cmake есть полезная информация об использовании механизма rpath: http://www.cmake.org/Wiki/CMake_RPATH_handling

Альтернативный метод — использовать ldconfig. Я заметил, что когда вы собираете svn(1.6.17), make install target вызывает ldconfig для установки rpath.

взгляните на $ORIGIN, так как он понадобится вам в вашем rpath, чтобы сохранить его относительно двоичного файла, а не относительно $PWD.

Построение простого (hello- world-esque) пример использования опции ld -rpath с $ORIGIN

person Phillip Whoriskey    schedule 30.03.2012
comment
Есть ли разница между CMAKE_INSTALL_RPATH и INSTALL_RPATH? - person BlazePascal; 14.11.2016

Насколько мне известно, CMake автоматически добавляет rpath ко всем целям, которые вы связываете с помощью target_link_libraries().

Для отключения есть опция CMAKE_SKIP_RPATH.

person arrowd    schedule 06.12.2011
comment
Я не хочу его выключать. Я создаю архив tar. и доставку lib1 и lib2 с помощью пользовательской установленной командной формы cmake. Я хочу, чтобы RPATH был связан относительно библиотеки. - person Vivek Goel; 06.12.2011
comment
Ах я вижу. Ну, я даже не уверен, можно ли изменить rpath на этапе установки, а не на этапе сборки. Глядя на различные приложения для *NIX, которые распространяются в двоичной форме, я могу предложить обернуть ваш исполняемый файл в шеллскрипт, который установит LD_LIBRARY_PATH перед запуском приложения. - person arrowd; 07.12.2011
comment
чтобы «обновить» RPATH, вы можете использовать github.com/NixOS/patchelf, который используется для проприетарного программного обеспечения. а также с открытым исходным кодом. - person qknight; 18.01.2017