Subject: Fw: Fighting gst-plugins
To: None <tech-userlevel@NetBSD.org>
From: Julio M. Merino Vidal <jmmv@menta.net>
List: tech-userlevel
Date: 04/05/2004 16:50:05
I've been suggested to ask here too, as this seems to be an issue related
to our ld.elf_so.
Thanks!
Begin forwarded message:
Date: Mon, 5 Apr 2004 14:16:04 +0200
From: "Julio M. Merino Vidal" <jmmv@menta.net>
To: tech-pkg@NetBSD.org
Subject: Fighting gst-plugins
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/