linux/gcc: функциональность ldd из программы C/C++

Есть ли простой и эффективный способ знать, что данный динамично связался ELF действительно ли отсутствие является необходимым .so для него для выполнения, все с внутренней части программы C/C++?

Мне нужна программа с несколько схожей функциональностью как ldd, не пытаясь выполниться ELF узнать (встретило/не встретило) зависимости в системе. Возможно, спрашивая ld-linux.so утилиту через некоторую библиотеку? (Я - новичок в этой части Linux =)

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

Если не возможно знать, что программа не встретила зависимости, не выполняя его, там некоторый путь к, по крайней мере, быстро список .so's, необходимый для этого ELF все из моей программы?

Заранее спасибо =)

6
задан Paul Sweatte 17 August 2012 в 22:55
поделиться

2 ответа

Согласно ld.so (8) , установка переменной среды LD_TRACE_LOADED_OBJECTS на непустую строку даст ldd -подобные результаты (вместо обычного выполнения двоичного файла или библиотеки).

setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
FILE *ldd = popen("/lib/libz.so");
8
ответ дан 16 December 2019 в 21:43
поделиться

Вы пробовали функцию dlopen ? вы можете использовать это для загрузки динамической библиотеки (или, в вашем случае, чтобы проверить, может ли библиотека быть загружена).

Получить список необходимых библиотек сложнее, обратитесь к handle_dynamic функция в источнике readelf

1
ответ дан 16 December 2019 в 21:43
поделиться
Другие вопросы по тегам:

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