[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 спасибо.