Какой надежный способ определить, какая разделяемая библиотека будет загружена на платформах Linux? - PullRequest
0 голосов
/ 25 февраля 2010

Мне нужно выяснить, какая библиотека будет загружена, учитывая информацию, возвращаемую из / sbin / ldconfig. Я придумал следующее:

#!/bin/bash
echo $(dirname $(/sbin/ldconfig -p | awk "/$1/ {print \$4}" | head -n 1))

Запуск результатов с:

$ whichlib libGL.so
/usr/X11R6/lib

Это вопрос из двух частей:

  1. Даст ли это надежный результат для всей платформы?
  2. Есть ли более удобный способ анализа вывода ldconfig?

Спасибо, Пол

Ответы [ 2 ]

0 голосов
/ 25 февраля 2010

Существует несколько способов загрузки библиотеки исполняемым файлом: 1.

  1. Использование $ LD_LIBRARY_PATH
  2. Использование кеша ld
  3. Libary с полным путем, скомпилированным в двоичный файл (-rpath gcc flag)

Вы используете вариант 2, тогда как варианты 1 и 3 не рассматриваются.

0 голосов
/ 25 февраля 2010

В зависимости от того, что именно вы делаете, вы можете запустить ldd непосредственно на исполняемом файле, который вы планируете запустить, а не в общем случае ldconfig.

Так как вы спросили, вы можете написать свой скрипт так:

dirname "$(/sbin/ldconfig -p | awk "\$1 == "$1" {print \$4; exit}")"

Это немного точнее и на одну трубу меньше. Также echo $(cmd) является избыточным; Вы можете просто написать cmd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...