Как указать dir разделяемой lib относительно $ ORIGIN в флаге runpath? - PullRequest
0 голосов
/ 15 апреля 2019

Эта веб-страница говорит мне, что мы можем использовать $ORIGIN, чтобы испечь каталог исполняемого файла как поиск каталога в исполняемом файле.Эта команда runpath может быть записана как:

-Wl,--enable-new-dtags,-rpath,"\$ORIGIN"

Но разделяемая библиотека, которую я пытаюсь загрузить, не совсем в том же каталоге, что и исполняемый файл.Он находится в поддиректории, скажем, LIB, где находится исполняемый файл.Эта веб-страница не говорит мне, как это сделать.Я пробовал много способов объединить LIB, но безрезультатно, например "\ $ ORIGIN / LIB", "\ $ ORIGIN" / LIB, \ $ ORIGIN / LIB или "\ $ ORIGIN / LIB /".Я не нашел никакой подсказки в поиске Google.Подскажите, пожалуйста, правильный синтаксис $ ORIGIN для указания dir относительно него в флаге runpath?Спасибо.

PS: я работаю над Ubuntu 16.04 с GNU make 4.1 и GNU ld 2.26.1.

1 Ответ

0 голосов
/ 16 апреля 2019

Майк Кингхан прав, "\$ORIGIN/LIB" в этом нет ничего плохого. Но это так, только если мы действительно передадим его компоновщику. Однако я не использую командную строку Linux. Я использую NetBeans. Когда я набираю "\$ORIGIN/LIB" буквально в Linker-> Additional Options, некоторая предварительная обработка выполняется (NetBeans или чем-то еще), так что это "\RIGIN/LIB", которое передается компоновщику. К счастью, я наконец-то понял, как обойти эту предварительную обработку:

-Wl,--enable-new-dtags,-rpath,"\$$ORIGIN/LIB"

То есть ключ - двойной знак доллара!

...