[Uneex] Re: [Uneex] libdl,dlopen и т.д.

Mike E. Matsnev uneex@cs.msu.su
Mon, 5 Nov 2001 17:24:42 +0300


On Sat, Nov 03, 2001 at 11:56:48PM +0300, Nikita V. Youshchenko wrote:
> > 2. Как заставить ее (dlopen + dlsym) "вытащить" адрес функции из
> > программы, в которой dlsym вызывается. Т.е. вызвать мою функцию
> > по ее имени. Какие для этого нужны ключи компилятора и 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 ) 
> можно получить доступ до всех функций.
Более прямо это делается через dlopen(NULL,RTLD_LAZY) и запуск gnu ld c -E
или --export-dynamic, соответственно gcc -Wl,-E x.o -o x (обратите внимание,
никаких .so здесь не нужно).

/Mike