Как найти общие объекты, загружаемые при запуске приложения?

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

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

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

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

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


person asker    schedule 02.03.2010    source источник


Ответы (1)


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

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

person nakiya    schedule 14.10.2010