[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