Как я могу перекомпилировать программу, чтобы она не требовала настройки LD_LIBRARY_PATH для запуска?

1

На сервере Solaris, где у меня нет администратора, я собираю и устанавливаю различное программное обеспечение $HOME/usr, и оно в основном работает. Однако некоторые программы, которые я компилирую таким образом, зависят от libiconv, в который я также установил $HOME/usr/lib. Эти программы не будут работать, если я export LD_LIBRARY_PATH=$HOME/usr/lib. Если я этого не сделаю, я получаю сообщение об ошибке, например:

ld.so.1: rsync: fatal: libiconv.so.2: open failed: No such file or directory

Это особенно плохо для rsync, потому что он не всегда работает в среде оболочки, поэтому у меня даже нет возможности использовать LD_LIBRARY_PATHего для работы. Можно ли скомпилировать мои программы так, чтобы мне не нужно было настраивать LD_LIBRARY_PATHих запуск?

Райан Томпсон
источник

Ответы:

2

Вы хотите посмотреть вверх rpath. С gcc вы переходите -Wl,-rpath,/directory/with/libraryна компиляцию / ссылку. Я думаю, что с компилятором Solaris флаг был -R/directory/with/library, но у меня нет машины Solaris для проверки.

Рич Гомолка
источник
Я использую GCC на солярисе, и я могу также использовать GNU binutils. Так я должен использовать -Wlформу?
Райан Томпсон
Да, -Wl для передачи компоновщику, а -rpath - это то, что понимает binutils, или -Wl, -R, / directory / with / library также должна работать (с линкером Solaris)
Rich Homolka
Могу ли я поставить -rpath /directory/with/libraryсвои LDFLAGS, или лучше поставить -Wl,-rpath,/directory/with/libraryмои CFLAGS?
Райан Томпсон
Вероятно, -Wl, -rpath, / path / to / dir в LDFLAGS. Make-файлы редко используют ld напрямую, но используют $ {CC} для управления строкой ld, поэтому -Wl подходит.
Rich Homolka
Подождите, вы не имеете в виду в CFLAGS?
Райан Томпсон