Существует несколько решений, от лучшего к худшему:
- Использование
$ORIGIN
, например gcc main.o -L../lib -lfoo -Wl,-rpath='$ORIGIN'/../lib
- Использование целевого RPATH, например
gcc main.o -L../LIB -lfoo -Wl,-rpath=/home/user/lib
- Установите
LD_LIBRARY_PATH
из вашего .bashrc
или .profile
Решение 1 позволяет вам устанавливать бинарный файл где угодно, если вы перемещаете бинарный файл и библиотеки вместе, например, my-app /bin / a.out и my-app / lib / {required-shared-libs} .so.Он также позволяет использовать несколько версий приложения и их набор общих библиотек.
Решение 2 отлично работает, если вам нужен только один набор общих библиотек, и вы никогда не захотите перемещать их.
Решение 3 влияет на каждое приложение, которое вы запускаете, и может заставить некоторые из них связываться с вашими общими библиотеками, а не с системными.Это может привести к их сбою, сбою с неразрешенными символами или к другой боли.Ситуация усугубляется только у вас и у кого-то еще, поэтому вам будет трудно получить помощь.