On Tue, 2007-06-05 at 17:08 +0100, Gary V. Vaughan wrote: > He Reuben, > > On 4 Jun 2007, at 09:55, Reuben Thomas wrote: > > I have a line of code like this: > > > > if ((l_fn = lt_dlsym(l_st->lth, "ladspa_descriptor")) == NULL) { > > > > where l_fn is a function pointer. gcc says: > > > > ladspa.c: In function 'sox_ladspa_getopts': > > ladspa.c:114: warning: ISO C forbids assignment between function > > pointer and 'void *' > > > > There's no problem with this on my machine with my compiler > > settings, but if I wanted to write strictly conforming ISO C it > > looks like I'd have a problem; equally if I wanted this code to run > > on a machine where void * was not compatible with a function pointer. > > > > Is there some way to avoid this problem? > > What type does dlsym() return on that system? > > If it is a void*, then I don't know of any portable way around it :-(
freeBSD has a dlfunc() function that behaves like dlsym but returns a function pointer, last time I looked it was implemented using a union... wait, let me look again...: http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/lib/libc/gen/dlfunc.c?rev=1.3;content-type=text%2Fplain I think it is even in our TODO to have libltdl do this somehow, in the meantime, Reuben can do something similar in his own code. Peter _______________________________________________ http://lists.gnu.org/mailman/listinfo/libtool