Колективна бібліотека HOWTO пояснює більшість механізмів , залучених, і динамічний завантажувач керівництво переходить в більш докладно. Кожен варіант Unix має свій власний шлях, але більшість використовують один і той же виконуваний формат ( ELF ) і мають схожі динамічні лінкери (похідні від Solaris). Нижче я підсумую загальну поведінку з акцентом на Linux; ознайомтеся з посібниками вашої системи на повну історію.
Коротше кажучи, коли він шукає динамічну бібліотеку ( .so
файл), лінкер намагається:
- каталоги, перелічені в
LD_LIBRARY_PATH
змінній середовища ( DYLD_LIBRARY_PATH
на OSX);
- каталоги, перелічені в rpath виконуваного файлу ;
- каталоги на шляху пошуку системи, який (як мінімум, в Linux) складається з записів у
/etc/ld.so.conf
плюс /lib
і /usr/lib
.
Rpath зберігається у виконуваному файлі (це DT_RPATH
або DT_RUNPATH
динамічний атрибут). Він може містити абсолютні шляхи або шляхи, починаючи з того, $ORIGIN
щоб вказати шлях відносно місця розташування виконуваного файлу (наприклад, якщо виконуваний файл знаходиться /opt/myapp/bin
і його rpath, $ORIGIN/../lib:$ORIGIN/../plugins
то динамічний лінкер буде шукати /opt/myapp/lib
і /opt/myapp/plugins
). Rpath зазвичай визначається, коли виконується компіляція виконуваного файлу, з -rpath
можливістю до ld
, але ви можете змінити його згодом за допомогою chrpath
.
У сценарії ви описали, якщо ви розробник або пакувальник додатки і призначаються для того , щоб встановити в …/bin
, …/lib
структурі, а потім зв'язати з -rpath='$ORIGIN/../lib'
. Якщо ви встановлюєте бінарник на вашій системі, або помістити в бібліотеку в каталозі на шляху пошуку ( /usr/local/lib
якщо ви системний адміністратор, в іншому випадку це каталог , який ви додаєте $LD_LIBRARY_PATH
), або спробувати chrpath
.
/lib64
і/usr/lib64
використовуються для 64 - бітних двійкових файлів і/lib
і/usr/lib
використовуються для 32 - бітних двійкових файлів.