dlsym can't use handle returned by dlopen?
Markus Hoenicka
markus.hoenicka at mhoenicka.de
Thu Nov 13 00:00:24 PST 2008
Quoting Jeremy Chadwick <koitsu at FreeBSD.org>:
> I know that the .so's you're loading with dlopen() need to be built a
> specific way/with certain arguments, otherwise they won't work (I
> believe what I saw was dlsym() returning NULL). My symbol names were
> getting stomped on, and there was a compiler flag that addressed that.
>
Is that a BSD-specific problem? As mentioned previously, I don't run
into trouble on other platforms. Is there any documentation available
which tells me how to build a dlopen()'able object in a portable way?
>> function_pointer = dlsym(RTLD_DEFAULT, "function_name");
>>
>> Why is that? Or rather: what am I doing wrong?
>
> This code right here is *completely* wrong. RTLD_DEFAULT is a mode bit
> for dlopen(). I'm willing to bet a strict set of warnings would
Citing the FreeBSD dlsym(3) man page:
"If dlsym is called with the special handle RTLD_DEFAULT, the
search for the symbol follows the algorithm used for resolving
undefined symbols when objects are loaded."
You probably had RTLD_LAZY and RTLD_NOW in mind which are dlopen()
flags. BTW RTLD_NEXT works just as well instead of RTLD_DEFAULT.
regards,
Markus
--
Markus Hoenicka
markus.hoenicka at cats.de
(Spam-protected email: replace the quadrupeds with "mhoenicka")
http://www.mhoenicka.de
More information about the freebsd-questions
mailing list