2017-02-21 45 views
1

Мне нужно сделать ELF-файл для использования абсолютных путей для библиотек вместо поиска по умолчанию (RPATH).Общая библиотека абсолютного пути в файле ELF

Это результат от readelf:

readelf -d example 

Dynamic section at offset 0xe28 contains 24 entries: 
Tag  Type       Name/Value 
0x0000000000000001 (NEEDED)    Shared library: [libc.so.6] 

Но я хочу, чтобы получить что-то вроде этого:

readelf -d example 

Dynamic section at offset 0xe28 contains 24 entries: 
Tag  Type       Name/Value 
0x0000000000000001 (NEEDED)    Shared library: [/lib/libc.so.6] 

Есть ли какие-либо опции компоновщика для достижения этой цели?

+0

Возможный дубликат [В чем разница между ldd и objdump?] (Http://stackoverflow.com/questions/11524820/what-is-the-difference-between-ldd-and-objdump) – yugr

ответ

-1

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

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

+0

Вы можете захотеть обосновать это? DT_NEEDED используется для предоставления указателю загрузчику того, где найти библиотеки - очевидно, с помощью вывода readelf выше, файл не имеет абсолютного пути, он имеет буквально строку «libc.so.6» - это динамический загрузчик загрузив его. Это не похоже на то, что я не писал об ELF в течение 10 лет ... https://blog.flameeyes.eu/tags/elf/ –

+0

Я думаю, что OP спрашивает, можно ли фактически сохранить абсолютный путь в 'DT_NEEDED' , –

+0

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