[Uneex] libdl,dlopen и т.д.
ertzog
uneex@cs.msu.su
Mon, 5 Nov 2001 10:26:55 -0600 (CST)
On Sat, 3 Nov 2001, Nikita V. Youshchenko wrote:
> man dlopen - там все написано (только что проверил лично)
Самое интересное, что Я это искал, но такой страницы нету :(
> Это весьма системно зависимо.
> На моей машине (Debian unstable, glibc 2.2.4, gcc 2.95.4) не сработало.
Странно ...
>
> Однако, проблема элементарно обходится. Достаточно представить всю
> программу не как ELF executable, а как ELF shared library. Т.е. линковать
> командой
> gcc -shared -o x.so $(SOURCES)
> После чего ввести
> gcc -o x x.so
> в результате чего будет создан исполняемый файл x, который использует все
> (включая main) из x.so. Теперь при помощи dlopen ( "x.so", RTLD_LAZY )
> можно получить доступ до всех функций.
>
Bыяснилось, что можно делать и не так, ключ gcc: '-rdynamic'
Самое приятное, что можно забирать символы из автоматически подгруженных
библиотек. Ключ -lm при компиляции, и все ф-ции из libm.so доступны
через dlsym. Собственно, говоря это - кусок калькулятора, который
сейчас делают 2-курсники. Мне это стало интересно и Я его написал.
P.S. но за идею, насчет -shared спасибо.