Где исполняемые файлы ищут общие объекты во времени выполнения?

Это отмечает конец параметра (опция) список.

110
26.07.2017, 00:39
4 ответа

Общая библиотека HOWTO объясняет большинство механизмов, включенных, и динамическое руководство загрузчика вдается в большее количество подробностей. Каждый вариант Unix поступает по-своему, но большая часть использования тот же формат исполняемых файлов (ELF) и имеет подобных динамических компоновщиков (полученный на основании Соляриса). Ниже я буду суммировать общее поведение с вниманием на 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.

В сценарии Вы описываете, если Вы - разработчик или поставщик программного блока приложения и предназначаете, чтобы это было установлено в a …/bin, …/lib структура, затем свяжитесь с -rpath='$ORIGIN/../lib'. Если Вы устанавливаете предварительно созданный двоичный файл в своей системе, любой поместил библиотеку в каталог на пути поиска (/usr/local/lib если Вы - системный администратор, иначе каталог, к которому Вы добавляете $LD_LIBRARY_PATH), или попытка chrpath.

109
27.01.2020, 19:29
  • 1
    В некоторых системах, /lib64 и /usr/lib64 используются для двоичных файлов на 64 бита и /lib и /usr/lib используются для двоичных файлов на 32 бита. –  Mark Lakata 04.06.2015, 21:21

Я вполне уверен, ответ здесь ldconfig.

ldconfig создает необходимые ссылки и кэш к новым общим библиотекам, найденным в каталогах, указанных на командной строке в файле/etc/ld.so.conf, и в доверяемых каталогах (/lib и/usr/lib). Кэш используется компоновщиком во время выполнения, ld.so, или ld-linux.so. ldconfig проверяет заголовок и имена файлов библиотек, с которыми он встречается при определении, каким версиям нужно обновить их ссылки.

http://linux.die.net/man/8/ldconfig

3
27.01.2020, 19:29

В Linux поведение является explicited в ld(1) страница справочника

       The linker uses the following search paths to locate required
       shared libraries:

       1.  Any directories specified by -rpath-link options.

       2.  Any directories specified by -rpath options.  The difference
           between -rpath and -rpath-link is that directories specified by
           -rpath options are included in the executable and used at
           runtime, whereas the -rpath-link option is only effective at
           link time. Searching -rpath in this way is only supported by
           native linkers and cross linkers which have been configured
           with the --with-sysroot option.

       3.  On an ELF system, for native linkers, if the -rpath and
           -rpath-link options were not used, search the contents of the
           environment variable "LD_RUN_PATH".

       4.  On SunOS, if the -rpath option was not used, search any
           directories specified using -L options.

       5.  For a native linker, the search the contents of the environment
           variable "LD_LIBRARY_PATH".

       6.  For a native ELF linker, the directories in "DT_RUNPATH" or
           "DT_RPATH" of a shared library are searched for shared
           libraries needed by it. The "DT_RPATH" entries are ignored if
           "DT_RUNPATH" entries exist.

       7.  The default directories, normally /lib and /usr/lib.

       8.  For a native linker on an ELF system, if the file
           /etc/ld.so.conf exists, the list of directories found in that
           file.

       If the required shared library is not found, the linker will issue
       a warning and continue with the link.
16
27.01.2020, 19:29
  • 1
    "Каталоги по умолчанию, обычно / lib и/usr/lib".->, как я могу узнать, нормальна ли моя система? основной момент –  Thorsten Staerk 06.12.2014, 09:30
  • 2
    Вопрос о времени выполнения и не время –  Talespin_Kit 06.03.2015, 12:25

Гвенвью, как я уже сказал, но это не то, чего я хотел.

gThumb может это сделать. Он поставляется с небольшими зависимостями, но выглядит чужеродно в Fluxbox.

Менее зависимое от рабочего стола решение - # 2 в разделе :

Установка gifsicle.

Создайте файл рабочего стола

[Desktop Entry]
Name=GIFview 
Exec=gifview -a %f
Icon=gif
Terminal=false
Type=Application
StartupNotify=true
NoDisplay=true
MimeType=image/gif

и поместите его в ~/.local/share/applications.

-121--79799-

Для этого нет общего метода. Фильтры - это просто потоки чтения и записи, они не модифицируют поток на месте, и взаимосвязь между ними абсолютно произвольна и зависит от конкретного инструмента. Таким образом, нет пути механизм общего назначения мог бы знать, что что-то было «удалено» из ввода, и, следовательно, сохранить его для копирования в выход.

Но такие инструменты, как awk и perl , могут записывать в произвольные файлы самостоятельно, так что они могут делать это с явным кодом:

awk '/regexp/ { print } !/regexp/ { print > "non-matching.txt" }' > matching.txt
-121--166239-

Для запущенных приложений файл /proc/1234/maps содержит все фактические динамически связанные библиотеки.

Где 1234 - это pid исполняемого файла.

Linux следует за LD_LIBRARY_PATH и другими переменными, как указано в ответе Жиля.

0
27.01.2020, 19:29

Теги

Похожие вопросы