Я пытаюсь добавить $ORIGIN
в переменную rpath моей программы.
Я добавил следующую строку в мой .pro-файл:
unix: QMAKE_RPATHDIR += \$$ORIGIN
И проверил, что команда действительно добавлена, проверив выходные данные компиляции. Вызов g ++, который генерирует qmake, выглядит так:
g++ -Wl,-rpath,/home/sky/Qt/5.5/gcc_64 -Wl,-rpath,$ORIGIN -Wl...
Как видите, добавлено origin (вместе с некоторыми другими значениями). Однако, если я проверю значение rpath с помощью readelf
, originis нет в списке. Вместо этого он показывает «пустую» запись (всего две двоеточия), кроме записей, добавленных qmake:
0x000000000000000f (RPATH) Bibliothek rpath: [/home/sky/Qt/5.5/gcc_64::/home/sky/Qt/5.5/gcc_64/lib]
Что мне здесь не хватает? Спасибо за вашу помощь!
Это здесь «qmake and rpath»:
Вы должны использовать функцию $ ORIGIN компоновщика времени выполнения.
К сожалению, из-за некоторого блестящего предвидения разработчиков загрузчика,
они использовали «$» в качестве префикса, что делает его королевской болью в заднице
пройти вокруг. Невозможно использовать его в QMAKE_RPATHDIR. Вы должны
вместо этого используйте:QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\''
так что он сохраняется как в файле проекта, так и в файле Makefile.
В вашей командной строке он идет в оболочку как -Wl,-rpath,$ORIGIN
а также $ORIGIN
расширен, поскольку знак доллара интерпретируется оболочкой. Это должно быть указано. Пример такой цитаты также приведен в LD.SO (8) справочная страница: gcc -Wl,-rpath,'$ORIGIN/../lib'
,
Других решений пока нет …