ldd команда ищет библиотек в произвольном месте - PullRequest
0 голосов
/ 05 октября 2010

Я выполнил команду truss для исполняемого файла и получил следующий вывод:

stat64 ("/ net / xyzmachine / vol / tools / solx64 / studio11 / SUNWspro / lib / rw7 / librt.so.1", 0x080474A0) (спящий ...) stat64 ("/ net / xyzmachine / vol / tools / solx64 / studio11 / SUNWspro / lib / rw7 / librt.so.1", 0x080474A0) Ошибка # 2 ENOENT stat64 ("/ net / xyzmachine / vol / tools / solx64 / studio11 / SUNWspro / lib / librt.so.1", 0x080474A0) (спящий ...)

Я просмотрел журналы сборки и Envs buildhost, но значение LD_LIB_PATH, LIBPATH, LD_RUN_PATH не указывает на это местоположение. Я не могу получить то, откуда пришло это значение?

Может ли кто-нибудь помочь мне понять это? как определяется путь поиска lib? Как устранить неполадки так же?

Ответы [ 4 ]

1 голос
/ 05 октября 2010

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

Он ищет библиотеки по путям, описанным в /etc/ld.so.conf (/etc/ld.so.conf.d/) или LD_LIBRARY_PATH,

Обратите внимание, что rpath также может быть установлено в самой общей библиотеке.

Более подробная информация здесь: Program-Library-HOWTO

0 голосов
/ 06 октября 2010

Спасибо, ребята, за вашу помощь. Я нашел проблему. кто-то удалил каталог / opt / studio11 и сделал ссылку на / net / xyzmachine / vol / tools / solx64 / studio11. поэтому во время компиляции он показывает мне как / opt / studio11 / .... но в файле карты он сохраняет значение "net / xyzmachine / vol / tools / solx64 / studio11".

Еще раз спасибо за вашу помощь.

0 голосов
/ 05 октября 2010

Похоже, ваш rpath установлен в исполняемом файле. Попробуйте:

chrpath /path/to/binary

И посмотрите, печатает ли это что-то вроде путей, которые вы получаете от ldd. Чтобы удалить ваш rpath и использовать стандартные системные библиотеки, используйте:

chrpath -d /path/to/executable
0 голосов
/ 05 октября 2010

Компоновщик, используемый для создания исполняемого файла, вероятно, жестко запрограммировал некоторый путь непосредственно в исполняемом файле.Большинство компоновщиков делают это по умолчанию и позволяют указать параметры в командной строке, чтобы добавить дополнительные пути для поиска .so библиотек.

...