Date: Tue, 19 Aug 1997 08:52:40 From: Hermann Schinagl <schinagl@avl.co.at> To: hackers@freebsd.org Subject: Re: Please Help Me Understand dlopen()] Message-ID: <19970819085282.NTM1204@umes01.avl.co.at>
next in thread | raw e-mail | index | archive | help
>I think the fix should assume that the application most likely wants >to look up a normal C symbol. So it should do something like this: > > /* > * First try: look for a normal C symbol like (in assembly > * language) "_foo". > */ > if (sym starts with "_") /* Assume caller already added "_" */ > trysym = sym; > else /* Add "_" for caller */ > trysym = concat("_", sym); /* Not C, but you get the idea */ > > if (lookup(trysym)) > return success; > > /* > * Second try: look for a strange C symbol like (in assembly > * language) "__foo", or an assembly language symbol "foo" with no > * underscore at all. > */ > if (sym starts with "_") /* Assume C symbol really starts with "_" */ > trysym = concat("_", sym); > else /* Assume caller wants assembly symbol */ > trysym = sym; > > if (lookup(trysym)) > return success; > > /* > * Give up. > */ > return failure; You forgot that the symbols, which are exported by the lib are totally different, if you rename a .c file to .cpp and compile it again. ==> C++ exported symbols Well, it is easy to add '_' before the symbol, but the function-arguments of a C++ exported function are append encoded to the symbolname. eg.: '__func027_dfiv' So writing a wrapper is not that straight forward as mentioned above. You should also think of the C++ exporting mechanism. Ciao Hermann Regards, Hermann Schinagl -------------------------------------------------------------------- Dipl.-Ing. Hermann Schinagl AVL List GmbH Kleiststrasse 48 Email : schinagl@avl.co.at A-8020 Graz Phone : ++43 316 987 324 PGP : http://www.pgp.net/pgp Power and ignorance is a disgusting cocktail.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19970819085282.NTM1204>