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

Reply via email to