Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Nov 2008 09:00:21 +0100
From:      Markus Hoenicka <markus.hoenicka@mhoenicka.de>
To:        Jeremy Chadwick <koitsu@FreeBSD.org>
Cc:        freebsd-questions@FreeBSD.org
Subject:   Re: dlsym can't use handle returned by dlopen?
Message-ID:  <20081113090021.less3h5iwwsgwsg4@webmail.df.eu>
In-Reply-To: <20081113042912.GA10018@icarus.home.lan>
References:  <18715.28127.306511.577084@yeti.mininet> <20081113042912.GA10018@icarus.home.lan>

next in thread | previous in thread | raw e-mail | index | archive | help
Quoting Jeremy Chadwick <koitsu@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 =20
into trouble on other platforms. Is there any documentation available =20
which tells me how to build a dlopen()'able object in a portable way?

>> function_pointer =3D 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 =20
search for the symbol follows the algorithm used for resolving =20
undefined symbols when objects are loaded."

You probably had RTLD_LAZY and RTLD_NOW in mind which are dlopen() =20
flags. BTW RTLD_NEXT works just as well instead of RTLD_DEFAULT.

regards,
Markus

--=20
Markus Hoenicka
markus.hoenicka@cats.de
(Spam-protected email: replace the quadrupeds with "mhoenicka")
http://www.mhoenicka.de




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20081113090021.less3h5iwwsgwsg4>