Re: dlopen: resolving external library symbols to calling program
- From: Kostik Belousov <kostikbel@xxxxxxxxx>
- Date: Fri, 30 Nov 2007 22:19:48 +0200
On Fri, Nov 30, 2007 at 04:40:33PM -0300, Alejandro Pulver wrote:
On Fri, 30 Nov 2007 19:02:01 +0200The ELF specification is freely available, and contains at least the
Kostik Belousov <kostikbel@xxxxxxxxx> wrote:
On Fri, Nov 30, 2007 at 01:28:58PM -0300, Alejandro Pulver wrote:
Hello.You are looking at the wrong symbol table. ELF objects have the dynamic
When I was updating the games/deng port, I found it failed at runtime
with the following error:
% doomsday
While opening dynamic library
/usr/local/lib/libdropengl.so:
/usr/local/lib/libdropengl.so: Undefined symbol "ArgExists"
DD_InitDGL: Loading of libdropengl.so failed.
(null).
The function is defined in m_args.c which is included in both
"doomsday" and "libdropengl.so". But nm(1) reports it as undefined for
"libdropengl.so". Also, it is loaded with RTLD_NOW.
% nm `which doomsday` | grep ArgExists
080d9ef0 T ArgExists
symbol table that is used during run-time linking, and symbol table used
by the static linker ld. The former table is shown by nm -D.
I suspect that you need to link the doomsday binary with the
--export-dynamic flag. See the info ld for details.
It worked, thank you very much. I am reading some books that explain
the basics of COFF/ELF formats (like Write Great Code Volume 2:
Thinking Low-Level, Writing High-Level), but didn't know about the
dynamic symbol table.
I found the following article which briefly describes it (though it's
for Solaris):
http://blogs.sun.com/ali/entry/inside_elf_symbol_tables
neccessary minimum of information. The object format has evolved
since then.
Sun' Linkers and Loaders Guide also contain a lot of useful information,
applicable to any ELF platform.
I remember it was me.
Now that I remember, the games/quakeforge port had the same problem.
But someone fixed it by referencing the symbol (it was only one
function) with a function pointer so it got exported in the dynamic
table. In this case, could that be done with "-u symbol" when linking
the executable, or it isn't possible to export a symbol with linker
parameters?
I do not know of any such facility in GNU ld. You may limit the exported
symbols by using the version script. But, by default, no symbols are
exported for executable (for shared object, reverse is true, all symbols
are exported).
Attachment:
pgpvXw5KVIc6i.pgp
Description: PGP signature
- References:
- dlopen: resolving external library symbols to calling program
- From: Alejandro Pulver
- Re: dlopen: resolving external library symbols to calling program
- From: Kostik Belousov
- Re: dlopen: resolving external library symbols to calling program
- From: Alejandro Pulver
- dlopen: resolving external library symbols to calling program
- Prev by Date: Re: dlopen: resolving external library symbols to calling program
- Previous by thread: Re: dlopen: resolving external library symbols to calling program
- Index(es):
Relevant Pages
|
|