2010-03-02 2 views
1

Я знаю, что с помощью dlopen с RLTD_NOLOAD можно узнать, загружен ли общий объект или нет. Это, однако, похоже, не работает, если так связано с исполняемым файлом и загружается компоновщиком во время запуска приложения.Как найти общие объекты, загруженные при запуске приложения?

Я имею в виду, скажем, у меня есть mylib.so и загрузить его с помощью dlopen. Позже, если я сделаю dlopen с RLTD_NOLOAD, я получу дескриптор, как ожидалось.

Однако, если я связываю mylib.so с приложением (-lmylib в файле makefile), то dlopen возвращает NULL.

Как я могу получить дескриптор совместно используемого объекта, если он напрямую связан с exec. и не загружается явно?

Спасибо заранее

ответ

1

Это слишком поздно, но -

dlopen(NULL, RTLD_LAZY/*Any load option u want*/) получит дескриптор двоичных. Предполагается, что он сможет найти любой символ в бинарных или разделяемых библиотеках, которые он загрузил. Я думаю, что это хорошее место для начала.