У меня есть двоичный CeeloPartyServer, которому нужно найти libFoundation.so во время выполнения на машине FreeBSD. Они оба находятся в одном каталоге. Я компилирую (на другой платформе, используя кросс-компилятор) CeeloPartyServer, используя флаг компоновщика -rpath=$ORIGIN
.
> readelf -d CeeloPartyServer |grep -i rpath
0x0000000f (RPATH) Library rpath: [$ORIGIN]
> ls
CeeloPartyServer Contents Foundation.framework libFoundation.so
> ./CeeloPartyServer
/libexec/ld-elf.so.1: Shared object "libFoundation.so" not found, required by "CeeloPartyServer"
Почему он не находит библиотеку, когда я пытаюсь ее запустить?
Моя точная строка компоновщика: -lm -lmysql -rpath=$ORIGIN
.
Я почти уверен, что мне не нужно экранировать $ или что-то в этом роде, поскольку мой анализ readelf действительно показывает, что rpath библиотеки установлен на $ ORIGIN. Что мне не хватает?
XORIGIN/../lib
для резервирования места в заголовке, а затем используетсяchrpath
для изменения на$ORIGIN/../lib
, чтобы избежать проблем с цитированием. Вы также можете захотеть-Wl,--enable-new-dtags
. - person jww   schedule 19.10.2018