Колективна бібліотека 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 - бітних двійкових файлів.