Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Nov 2007 19:02:01 +0200
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Alejandro Pulver <alepulver@freebsd.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: dlopen: resolving external library symbols to calling program
Message-ID:  <20071130170201.GK83121@deviant.kiev.zoral.com.ua>
In-Reply-To: <20071130132858.1e4290a0@deimos.mars.bsd>
References:  <20071130132858.1e4290a0@deimos.mars.bsd>

next in thread | previous in thread | raw e-mail | index | archive | help

--lRF4gxo9Z9M++D0O
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Fri, Nov 30, 2007 at 01:28:58PM -0300, Alejandro Pulver wrote:
> Hello.
>=20
> When I was updating the games/deng port, I found it failed at runtime
> with the following error:
>=20
> % 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).
>=20
> 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.
>=20
> % nm `which doomsday` | grep ArgExists
> 080d9ef0 T ArgExists
You are looking at the wrong symbol table. ELF objects have the dynamic
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.
>=20
> % nm /usr/local/lib/libdropengl.so | grep ArgExists
>          U ArgExists
>=20
> The files are linked with the "-flat namespace" and "-undefined
> suppress" flags in Mac OS X (don't know if it's relevant here).
>=20
> I think the simplest solution (if possible, of course) would be to make
> dlopen() resolve these symbols to the main executable. I tried to do
> this with RTLD_GLOBAL without success.
>=20
> The port is available here (note that the application uses cmake to
> build):
> ftp://ftp.alepulver.com.ar/deng.tar.bz2
>=20
> If you need any other information just ask me. I will appreciate any
> help.
>=20
> Thanks and Best Regards,
> Ale



--lRF4gxo9Z9M++D0O
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)

iD8DBQFHUEIJC3+MBN1Mb4gRAuj7AJ4wvGFK6cliYiVXlq6aeVyZ2Bbl6wCfTB4C
4wXfAwP6uTV3+CIL8DxxnUQ=
=aXCW
-----END PGP SIGNATURE-----

--lRF4gxo9Z9M++D0O--



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