Subject: Re: Fighting gst-plugins
To: None <tech-pkg@NetBSD.org>
From: Julio M. Merino Vidal <jmmv@menta.net>
List: tech-pkg
Date: 04/05/2004 14:55:30
Hmmm... can this be caused because we don't have lazy binding?



On Mon, 5 Apr 2004 14:16:04 +0200
"Julio M. Merino Vidal" <jmmv@menta.net> wrote:

> Hi all,
> 
> maybe this is not the best list to ask (which one do you suggest?), but as
> this is related to pkgsrc... I need help! ;-)
> 
> I'm trying to solve multiple problems in the gst-plugins package (aside of
> splitting it in several individual packages for finer granularity of
> dependencies and easier debugging).  Consider the following problem:
> 
> -----
> [dawn gst-plugins-esound] $ gst-inspect esdsink
> /usr/pkg/lib/gstreamer-0.8/libgstesd.so: Undefined PLT symbol "gst_audio_clock_new" (symnum = 31)
> -----
> 
> Eww.  Searching for that function, I see it's defined in the libgstaudio.so
> file, under /usr/pkg/lib/gstreamer-0.8:
> 
> -----
> [dawn gstreamer-0.8] $ nm libgstaudio.so | grep gst_audio_clock_new
> 00001c60 T gst_audio_clock_new
> [dawn gstreamer-0.8] $ nm libgstesd.so | grep gst_audio_clock_new
>          U gst_audio_clock_new
> -----
> 
> And that library is supposed to be loaded by libgstesd.so automatically
> (according to its code, plugin_init function).  So, to be sure, I added
> some printf's and ld.elf_so debugging code.  As a result, with the same
> call above (the one calling gst-inspect), setting LD_DEBUG=yes, I get:
> 
> -----
> [...]
> Loading gstaudio
>  added path "/usr/pkg/lib"
>  added path "/usr/pkg/lib/python2.2/config"
>  added path "/usr/X11R6/lib"
>   0x48440000 .. 0x48443fff: /usr/pkg/lib/gstreamer-0.8/libgstaudio.so
> load by name libintl.so.0 0x4805e000
>  Searching for "libintl.so.0" (0x48063800)
>   Trying "/usr/lib/libintl.so.0"
> doing non-PLT relocations
> doing lazy PLT binding
> fixing up PLTGOT
> Loaded gstaudio
> /usr/pkg/lib/gstreamer-0.8/libgstesd.so: Undefined PLT symbol "gst_audio_clock_new" (symnum = 31)
> -----
> 
> According to this, the library has been loaded in the program's space (using
> the g_module_load provided by glib, with lazy binding).  And I guess it should
> be able to access the function; isn't it??  (it does in linux, where all
> this works...)
> 
> So I tried with LD_PRELOAD.  Aside from libgstaudio.so, I also had to pass
> a shared library in the variable, which seems more strange.  But it worked:
> 
> -----
> [dawn gstreamer-0.8] $ LD_PRELOAD=libgstaudio.so:../libgstreamer-0.8.so gst-inspect esdsink 
> Factory Details:
>   Long name:    Esound audio sink
>   Class:        Sink/Audio
>   Description:  Plays audio to an esound server
>   Author(s):    Richard Boulton <richard-gst@tartarus.org>
>   Rank:         none
> [...]
> -----
> 
> The plugins are built with -module -avoid-version and -export-dynamic.
> 
> I'm getting crazy.  Can anybody give me any pointers about what can be
> wrong?
> 
> Thank you!
> 
> -- 
> Julio M. Merino Vidal <jmmv@menta.net>
> The NetBSD Project - http://www.NetBSD.org/
> 


-- 
Julio M. Merino Vidal <jmmv@menta.net>
The NetBSD Project - http://www.NetBSD.org/