[gst-devel] "No such element or plugin mad"

Thomas Vander Stichele thomas at apestaart.org
Wed Dec 15 03:44:03 CET 2004


> And i listed the steps for cross-compilation fro ARM on host x86 and
> then copied the necessary files and plugins to the target filesystem. 
> I am sure i have plugins(mad,lame etc)  on target.But  It struck up at
> generating registry file with proper plugin path on taget.Gst-register
> is not able to load the plugins.
> Please see the logs below.  

You haven't replied on the question of how familiar you are with cross-
compilation in the first place.  I was asking that to try and guess how
much you know of what should be done.  Not that I'm an expert, but I
have done some of it in the past.

> CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-ld
> ./configure --host=arm-linux
> LDFLAGS=-/usr/local/scratch/trilok/ws/target/lib
> CFLAGS=-I/usr/local/scratch/trilok/ws/target/include
> --prefix=/usr/local/fs/
> vishwa && make && make install

Correct me if I'm wrong, but your choice of --prefix argument makes me
believe you're not that familiar with cross-compilation.  AFAIK,
typically you have these two steps:

a) configure - this is where you choose a prefix that everything will be
installed to *on the target platform*.  Ie, if you want your binaries
*on the target platform* to be dropped in /usr/bin, and the libs
in /usr/lib, then you should configure with prefix "/usr".  You seem to
be configuring to build GStreamer so that GStreamer thinks it will end
up in your *staging area*.

Also note, unless you have a better reason not to do so, you really do
want your plugins to not end up in /lib/gstreamer-0.8, but
in /usr/lib/gstreamer-0.8 or /usr/local/lib/gstreamer-0.8.

b) install - this is where you override install-time locations so you
install your build of GStreamer in your host's staging area.  So I would
assume that in your case, your staging area is in /usr/local/fs on your
host machine, and you would do either:
make DESTDIR=/usr/local/fs install
or something like
make prefix=/usr/local/fs/usr install

I would recommend the first, and it ought to work correctly.  These are
very typical steps in cross-compiling any autotooled project AFAIK.

> 3. Copy files (libraries,lib/gstreamer-0.8,binaries) from the
> directory
> specified in prefix to target filesystem.

This step should be handled by the install step above, and NOT done by
hand, unless you *really* know what you are doing.

> 4.On target export plugin paths
> # export GST_PLUGIN_PATH=/lib/gstreamer-0.8:$GST_PLUGIN_PATH

Don't even set this variable at all - GStreamer should be correctly
built with the right location in it because of fixing your configure

> 5.Run "gst-register" on target
> # gst-register
> Rebuilding global_registry
> (/usr/local/fs/vishwa/var/cache/gstreamer-0.8/registr
> y.xml) ...
> Rebuilding user_registry (/root/.gstreamer-0.8/registry.xml) ...
> Loaded 0 plugins with 0 features.
> 6. This the content of global_registry
> # cat /usr/local/fs/vishwa/var/cache/gstreamer-0.8/registry.xml

Is /usr/local/fs directly mounted on your target platform as the root
system ? Or do you make a copy ? Since you say you run gst-register on
the target, generating this registry file on your host, I assume it is
the former.

> <?xml version="1.0"?>
> <GST-PluginRegistry>
> <gst-plugin-paths>
> <path>/lib/gstreamer-0.8</path>
^... this is the line you added to GST_PLUGIN_PATH, which as mentioned
should be removed.

> <path>/usr/local/fs/vishwa/lib/gstreamer-0.8</path>
^... this is the path that got compiled in because of your choice of --
prefix in your original configure, and will be fixed.


Dave/Dina : future TV today ! - http://www.davedina.org/
<-*- thomas (dot) apestaart (dot) org -*->
and it looks so pretty
all those tiny bright lights
calling my name
<-*- thomas (at) apestaart (dot) org -*->
URGent, best radio on the net - 24/7 ! - http://urgent.fm/

More information about the gstreamer-devel mailing list