OK, there seem to be 2 problems, first is that unless I run pntld with the -a argument, no symbols make it into my shared library. I've not had a chance to mess with that yet, but I'd love to hear speculation if there is any.
The second problem is that of the unsupported relocation type; I've traced through the dlopen code, and it appears that support seems to have been commented out:
#if 0 case COFFReloc_I386_dir32nb: #ifdef DLDEBUG fprintf(stderr,"DL: reloc absolute nb: loc %p = %p\n", loc,ptr); #endif ((int32 *)loc)[0]+=((INT32)ptr) - global_imagebase; break; #endif
Anyone know the reason for that? I'm going to try reenabling it...
Bill
On Tue, 4 Oct 2005, Bill Welliver wrote:
OK, I've had a quick look at the MS PECOFF format document, and it seems that a type 7 relocation (which is what the error was) is the target's 32-bit relative virtual address, as opposed to type 6, which is the target's 32-bit (presumably absolute) virtual address. So, it looks like some of this is coming from the libraries provided by MinGW, and are passed through to the .so file by pntld. That makes me think that the problem might be in dlopen.c, which I've not had a chance to look into.