From wettenhall at wehi.edu.au  Tue Jun  8 17:13:10 2004
From: wettenhall at wehi.edu.au (James Wettenhall)
Date: Tue Jun  8 17:13:16 2004
Subject: [Rd] Nested shared library calls in Linux
In-Reply-To: <20040608142454.GA19388@wald.ucdavis.edu>
References: <Pine.LNX.4.44.0406082302570.933-100000@unix24.alpha.wehi.edu.au>
	<20040608142454.GA19388@wald.ucdavis.edu>
Message-ID: <Pine.LNX.4.58.0406090104440.32669@unix28.alpha.wehi.edu.au>

Duncan,

Thanks for your answer.

I just realised that I was probably a bit too quick to claim 
that ~/usr/local/lib/R/bin/ is the only place that the dynamic 
linker is looking for libwx_gtk_html-2.5.so.1  I don't have much 
experience at reading strace output.  I think it looks in the 
wrong place initially, but then in the correct place.

On Jun 2004, Duncan Temple Lang wrote:
> What should happen is that _core.so and all Python packages
> should be linked against libpython2.2.so or libpython2.2.a.
> We can tell whether this has happened via
> 
>   ldd  /export/share/disk501/lab0605/wettenhall/usr/local/lib/
python2.2/site-packages/wx/_core.so 

I haven't included all the ldd output from wxPython's _core.so 
but I can tell you that libpython2.2.so is not there.  Here's 
some of the output:
unix28 507 % ldd _core.so
        libwx_gtk_html-2.5.so.1 => 
/home/users/lab0605/wettenhall/usr/local/lib/libwx_gtk_html-2.5.so.1 
(0x00842000)
        libwx_gtk_adv-2.5.so.1 => 
/home/users/lab0605/wettenhall/usr/local/lib/libwx_gtk_adv-2.5.so.1 
(0x00d98000)
        libwx_gtk_core-2.5.so.1 => 
/home/users/lab0605/wettenhall/usr/local/lib/libwx_gtk_core-2.5.so.1 
(0x00111000)
        libwx_base_xml-2.5.so.1 => 
/home/users/lab0605/wettenhall/usr/local/lib/libwx_base_xml-2.5.so.1 
(0x003e5000)
        libwx_base_net-2.5.so.1 => 
/home/users/lab0605/wettenhall/usr/local/lib/libwx_base_net-2.5.so.1 
(0x0054b000)
        libwx_base-2.5.so.1 => 
/home/users/lab0605/wettenhall/usr/local/lib/libwx_base-2.5.so.1 
(0x005e5000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x004e6000)
        libc.so.6 => /lib/tls/libc.so.6 (0x00a39000)
<snip>

> 
>   nm  /export/share/disk501/lab0605/wettenhall/usr/local/lib/python2.2/site-packages/wx/_core.so  | grep PyExc_IOError

This returns:
unix28 510 % nm _core.so | grep PyExc_IOError
         U PyExc_IOError

i.e. the symbol is undefined in wxPython's _core.so

whereas it is defined in libpython2.2.so :
unix28 513 % nm libpython2.2.so | grep PyExc_IOError
000f65d8 B PyExc_IOError

(To be precise, it is declared but not initialized).

OK, so I guess I will experiment with trying to build wxPython 
and get it to link against libpython2.2.so.  

Or maybe for each wxPython .so file, I can just add a 
libpython2.2.so dependency with something like:
ld -o _core2.so _core.so libpython2.2.so
mv _core2.so _core.so

I'll play around with this sort of thing for a while...

Regards,
James


[Rd] Nested shared library calls in Linux
James Wettenhall