Как работают * .so файлы и куда они идут в UNIX? - PullRequest
1 голос
/ 03 марта 2012

Недавно я «компилировал» скрипты Python в двоичную форму для внутреннего распространения.Я использую утилиту cx_freeze, которая в состоянии по умолчанию создает каталог с основным двоичным исполняемым файлом, а также набор двоичных файлов * .so.Насколько я понимаю, что .so файлы являются библиотеками, и они, очевидно, необходимы для обеспечения работы исполняемого двоичного файла, но мой вопрос заключается в том, как я могу связать вещи вместе, чтобы они не все были в одном каталоге?Должен ли я определить это во время компиляции?Существует ли универсальная переменная пути, в которой исполняемые файлы будут искать библиотеки, которые могут ей понадобиться, или этот путь указан где-то в самом исполняемом файле?

Заранее спасибо!

1 Ответ

4 голосов
/ 03 марта 2012

Динамический компоновщик ищет общие объекты в нескольких местах, как описано в справочной странице динамического компоновщика для linux или OSX :

  1. DT_RPATH атрибут хранится в двоичном формате для файлов ELF.
  2. LD_LIBRARY_PATH переменная среды, если исполняемый файл не является set-user-id / set-group-id.
  3. DT_RUNPATH атрибут хранится в двоичном формате для файлов ELF.
  4. /etc/ld.so.cache файл, который служит кэшем пути к библиотеке для динамического компоновщика.
  5. Наконец, каталоги по умолчанию /lib и /usr/lib.
...