После сборки с помощью CMake в Linux (но перед установкой) все связанные библиотеки добавляются в конечный исполняемый файл RPATH.
Однако я хотел бы добавить $ORIGIN/../lib:
к этому RPATH.
Пока мне удалось заменить только RPATH, и это не то, что я хочу: я хочу ld.so
сначала посмотреть ../lib
. Вот чем я сейчас занимаюсь:
set_target_properties(foo PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH "\$ORIGIN/../lib:...")
Хотя это работает, в нем отсутствуют некоторые дополнительные сторонние библиотеки, которые не являются частью моего дерева сборки и которые не находятся в системных каталогах.
Выполнение chrpath -l foo
дает мне то же самое, что и INSTALL_RPATH
выше. Если я не устанавливаю эти свойства, я получаю длинный список местоположений DSO, например, RPATH=/bar/baz/:/quux/
и т. Д. (Тот, который я хотел бы добавить в начало).
Я пробовал использовать get_property(_existing_rpath foo INSTALL_RPATH)
, но это дает мне пустую строку
Я прочитал подсказки на https://cmake.org/Wiki/CMake_RPATH_handling и заметил в разделе «Ошибки CMake», что
По крайней мере, в CMake 2.6.4 RHEL5 команда man cmakecommands для INSTALL_RPATH_USE_LINK_PATH делает вид, что этот параметр добавляет путь ссылки к любому указанному содержимому CMAKE_INSTALL_RPATH. Однако в этой версии включение INSTALL_RPATH_USE_LINK_PATH заменит его.
Что ж, в этом я уже не уверен: только что проверил это на CMake 2.8.0, и теперь в обеих версиях перечислены правильные изменения в cmake_install.cmake. Эта ошибка могла возникнуть из-за того, что ранее не выполнялась установка для каждой цели, или, возможно, из-за некоторых других изменений в переменных, связанных с CMake RPATH.
Между прочим, меня интересует только рабочий RPATH для собранных файлов, как до запуска install. Я не настроил установку должным образом (добавил цели установки и т. Д.). Мне нужно изучить эту часть, чтобы это сработало?
Если вы не можете найти ответы в Google, часто ответ очевиден. Кажется, это работает нормально:
set_target_properties(foo PROPERTIES
BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_RPATH_USE_LINK_PATH TRUE
INSTALL_RPATH "\$ORIGIN/../lib:${INSTALL_RPATH}")
В моей системе (и CMake 3.6.1) кажется, что он INSTALL_RPATH
начинается с двоеточия, но я бы не стал на это рассчитывать. Кроме того, поскольку я, очевидно, устанавливаю здесь глобальное значение INSTALL_RPATH
, оно может быть завышено (я не проверял).
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения