Building a stand-alone, static, debug'-g' version of GStreamer

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Building a stand-alone, static, debug'-g' version of GStreamer

FritzKatz
  I'd like to build a stand-alone, static, debug'-g' version of GStreamer so I can step through simulations, bugs, and new plugin development with a source-debugger. I'd like to install the executables, libraries, includes, and debug versions of plugins in a directory ~/BIN under my user account.  I'd also like to leave the system GStreamer working so I can switch back and forth between development and a known, working system.

  Is there a better way of doing this? Please let me know. This is what I've been able to figure out on my own:
__________________________________________

  I've successfully built gstreamer-0.10 ( from http://gstreamer.freedesktop.org/src/ ). And I've installed my local copy to compile and build against by doing:

$ cd ~/DEV/gstreamer-0.10/
$ ./configure --enable-debug --enable-gst-debug --enable-profiling --enable-parse --enable-option-parsing --enable-static --disable-shared --prefix=/home/user/BIN
$ make
$ make install

So now I've got my own debug version of the Gstreamer launcher, inspector, includes, and libs. Everything appears to be happy, so far.

$ cd ~/BIN
$ tree -d
        .
        |-- bin
        |-- include
        |   `-- gstreamer-0.10
        |       `-- gst
        |           |-- base
        |           |-- check
        |           |-- controller
        |           |-- dataprotocol
        |           `-- net
        |-- lib
        |   |-- gstreamer-0.10
        |   `-- pkgconfig
        |-- libexec
        |   `-- gstreamer-0.10
        `-- share
            |-- aclocal
        [[...]]
__________________________________________

Next I downloaded the gst-plugins-base-0.10, built, and statically linked against my development version:

$ cd ~/DEV/gst-plugins-base-0.10/
$ export GST_CFLAGS="-I/home/user/BIN/include/gstreamer-0.10 \
          -I/home/user/BIN/include/gstreamer-0.10/gst -I/usr/include/glib-2.0 \
          -I/usr/lib/glib-2.0/include -I/usr/include/libxml2"

$ export GST_LIBS="-pthread -static -L/home/user/BIN/lib -lgstreamer-0.10 \
          -lxml2 -lgthread-2.0 -lrt -lgobject-2.0 -lglib-2.0"

$ ./configure --enable-debug --enable-static --enable-profiling --disable-shared --prefix=/home/user/BIN
$ make
$ make install
__________________________________________

I can verify my debug versions of the gst-plugins-base were correctly installed and visible:

$ cd ~/BIN/bin/
$ ./gst-inspect
        audioresample:  audioresample: Audio resampler
        playback:  subtitleoverlay: Subtitle Overlay
         [[...]]
        audiotestsrc:  audiotestsrc: Audio test source
        alsa:  alsasink: Audio sink (ALSA)
        alsa:  alsasrc: Audio source (ALSA)
        alsa:  alsamixer: Alsa mixer
        coreelements:  valve: Valve element
          [[...]]
        typefindfunctions: audio/x-musepack: mpc, mpp, mp+
        typefindfunctions: video/x-ms-asf: asf, wm, wma, wmv
        staticelements:  bin: Generic bin
        staticelements:  pipeline: Pipeline object
        Total count: 26 plugins, 178 features

However, when I try inspect one of the plugins, or use ./gst-launch, I get "GLib-GObject-CRITICAL" errors:

$ ./gst-inspect alsasink
        (gst-inspect-0.10:30950): GLib-GObject-WARNING **: cannot register existing type `GstObject'
        (gst-inspect-0.10:30950): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed
        (gst-inspect-0.10:30950): GLib-GObject-CRITICAL **: g_type_register_static: assertion `parent_type > 0' failed
        (gst-inspect-0.10:30950): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed
        (gst-inspect-0.10:30950): GLib-GObject-CRITICAL **: g_type_register_static: assertion `parent_type > 0' failed
__________________________________________

Is there something obvious I've done wrong?  Where to go next?  

Since I've got debug turned on, I can get lot's of information. Spewage from turning on GST_DEBUG indicates that it's using the correct library in ~/BIN/lib.  It even says it "looks good", just before it hangs

$ export GST_DEBUG=5
$ ./gst-inspect alsasink

0:00:00.000448594 31059  0xa0bf070 INFO                GST_INIT gst.c:613:init_pre: Initializing GStreamer Core Library version 0.10.36
0:00:00.000485536 31059  0xa0bf070 INFO                GST_INIT gst.c:614:init_pre: Using library installed in /home/user/BIN/lib
0:00:00.000495006 31059  0xa0bf070 INFO                GST_INIT gst.c:624:init_pre: Linux ubuntu 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:13:04 UTC 2012 i686
 [[...]]
0:00:00.904396010 31156  0x8232070 DEBUG     GST_PLUGIN_LOADING gstplugin.c:1293:gst_plugin_load_by_name: looking up plugin alsa in default registry
0:00:00.904410607 31156  0x8232070 DEBUG     GST_PLUGIN_LOADING gstplugin.c:1296:gst_plugin_load_by_name: loading plugin alsa from file /home/user/BIN/lib/gstreamer-0.10/libgstalsa.so
0:00:00.904419281 31156  0x8232070 DEBUG     GST_PLUGIN_LOADING gstplugin.c:737:gst_plugin_load_file: attempt to load plugin "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so"
0:00:00.905904303 31156  0x8232070 LOG       GST_PLUGIN_LOADING gstplugin.c:834:gst_plugin_load_file: Plugin 0x824ba20 for file "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so" prepared, calling entry function...
0:00:00.905922400 31156  0x8232070 LOG       GST_PLUGIN_LOADING gstplugin.c:841:gst_plugin_load_file: Plugin 0x824ba20 for file "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so" prepared, registering...
0:00:00.905933556 31156  0x8232070 LOG       GST_PLUGIN_LOADING gstplugin.c:540:gst_plugin_register_func: plugin "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so" looks good

(gst-inspect-0.10:866): GLib-GObject-WARNING **: cannot register existing type `GstObject'

(gst-inspect-0.10:866): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed

(gst-inspect-0.10:866): GLib-GObject-CRITICAL **: g_type_register_static: assertion `parent_type > 0' failed
__________________________________________

And, here's a backtrace from gdb where the program is hanging:
__________________________________________

$ ps -aux | grep inspect
  fritzkatz   32146  0.0  0.1   9552  3036 pts/0    S    19:12   0:00 /home/user/BIN/bin/gst-inspect-0.10 alsasink

$ gdb /home/user/BIN/bin/gst-inspect-0.10 32146
 
  [[...]]

warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
0x0012d422 in __kernel_vsyscall ()

(gdb) bt
#0  0x0012d422 in __kernel_vsyscall ()
#1  0x003aa015 in ?? ()
#2  0x0066b738 in ?? ()
#3  0x0067e98b in ?? ()
#4  0x005948c2 in ?? ()
#5  0x00596482 in ?? ()
#6  0x080929a6 in gst_plugin_register_func (plugin=0x80f70bc, desc=0x0, user_data=<value optimized out>) at gstplugin.c:557
#7  0x080943c3 in gst_plugin_load_file (filename=0x8125c40 "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so",
    error=0xbffff04c) at gstplugin.c:843
#8  0x08094fb9 in gst_plugin_load_by_name (name=0x8125c10 "alsa") at gstplugin.c:1297
#9  0x08095a68 in gst_plugin_feature_load (feature=0x81262d0) at gstpluginfeature.c:111
#10 0x08051f36 in print_element_info (factory=0xfffffe00, print_names=0) at gst-inspect.c:1332
#11 0x0805315f in main (argc=2, argv=0xbffff324) at gst-inspect.c:1619

Reply | Threaded
Open this post in threaded view
|

Re: Building a stand-alone, static, debug'-g' version of GStreamer

Luis de Bethencourt
Hi,

In your folder just git clone all the modules and use the gst-uninstalled
script in gstreamer (core module)/scripts

http://gstreamer.freedesktop.org/wiki/UninstalledSetup

Or you can use jhbuild

http://wiki.pitivi.org/wiki/GStreamer_using_jhbuild

I prefer gst-uninstalled though, but it is a matter of personal taste.

Luis

On 23 May 2012 01:58, FritzKatz <[hidden email]> wrote:

>  I'd like to build a stand-alone, static, debug'-g' version of GStreamer so
> I can step through simulations, bugs, and new plugin development with a
> source-debugger. I'd like to install the executables, libraries, includes,
> and debug versions of plugins in a directory ~/BIN under my user account.
> I'd also like to leave the system GStreamer working so I can switch back and
> forth between development and a known, working system.
>
>  Is there a better way of doing this? Please let me know. This is what I've
> been able to figure out on my own:
> __________________________________________
>
>  I've successfully built gstreamer-0.10 ( from
> http://gstreamer.freedesktop.org/src/ ). And I've installed my local copy to
> compile and build against by doing:
>
> $ cd ~/DEV/gstreamer-0.10/
> $ ./configure --enable-debug --enable-gst-debug --enable-profiling
> --enable-parse --enable-option-parsing --enable-static --disable-shared
> --prefix=/home/user/BIN
> $ make
> $ make install
>
> So now I've got my own debug version of the Gstreamer launcher, inspector,
> includes, and libs. Everything appears to be happy, so far.
>
> $ cd ~/BIN
> $ tree -d
>        .
>        |-- bin
>        |-- include
>        |   `-- gstreamer-0.10
>        |       `-- gst
>        |           |-- base
>        |           |-- check
>        |           |-- controller
>        |           |-- dataprotocol
>        |           `-- net
>        |-- lib
>        |   |-- gstreamer-0.10
>        |   `-- pkgconfig
>        |-- libexec
>        |   `-- gstreamer-0.10
>        `-- share
>            |-- aclocal
>        [[...]]
> __________________________________________
>
> Next I downloaded the gst-plugins-base-0.10, built, and statically linked
> against my development version:
>
> $ cd ~/DEV/gst-plugins-base-0.10/
> $ export GST_CFLAGS="-I/home/user/BIN/include/gstreamer-0.10 \
>          -I/home/user/BIN/include/gstreamer-0.10/gst
> -I/usr/include/glib-2.0 \
>          -I/usr/lib/glib-2.0/include -I/usr/include/libxml2"
>
> $ export GST_LIBS="-pthread -static -L/home/user/BIN/lib -lgstreamer-0.10 \
>          -lxml2 -lgthread-2.0 -lrt -lgobject-2.0 -lglib-2.0"
>
> $ ./configure --enable-debug --enable-static --enable-profiling
> --disable-shared --prefix=/home/user/BIN
> $ make
> $ make install
> __________________________________________
>
> I can verify my debug versions of the gst-plugins-base were correctly
> installed and visible:
>
> $ cd ~/BIN/bin/
> $ ./gst-inspect
>        audioresample:  audioresample: Audio resampler
>        playback:  subtitleoverlay: Subtitle Overlay
>         [[...]]
>        audiotestsrc:  audiotestsrc: Audio test source
>        alsa:  alsasink: Audio sink (ALSA)
>        alsa:  alsasrc: Audio source (ALSA)
>        alsa:  alsamixer: Alsa mixer
>        coreelements:  valve: Valve element
>          [[...]]
>        typefindfunctions: audio/x-musepack: mpc, mpp, mp+
>        typefindfunctions: video/x-ms-asf: asf, wm, wma, wmv
>        staticelements:  bin: Generic bin
>        staticelements:  pipeline: Pipeline object
>        Total count: 26 plugins, 178 features
>
> However, when I try inspect one of the plugins, or use ./gst-launch, I get
> "GLib-GObject-CRITICAL" errors:
>
> $ ./gst-inspect alsasink
>        (gst-inspect-0.10:30950): GLib-GObject-WARNING **: cannot register existing
> type `GstObject'
>        (gst-inspect-0.10:30950): GLib-CRITICAL **: g_once_init_leave: assertion
> `initialization_value != 0' failed
>        (gst-inspect-0.10:30950): GLib-GObject-CRITICAL **: g_type_register_static:
> assertion `parent_type > 0' failed
>        (gst-inspect-0.10:30950): GLib-CRITICAL **: g_once_init_leave: assertion
> `initialization_value != 0' failed
>        (gst-inspect-0.10:30950): GLib-GObject-CRITICAL **: g_type_register_static:
> assertion `parent_type > 0' failed
> __________________________________________
>
> Is there something obvious I've done wrong?  Where to go next?
>
> Since I've got debug turned on, I can get lot's of information. Spewage from
> turning on GST_DEBUG indicates that it's using the correct library in
> ~/BIN/lib.  It even says it "looks good", just before it hangs
>
> $ export GST_DEBUG=5
> $ ./gst-inspect alsasink
>
> 0:00:00.000448594 31059  0xa0bf070 INFO                GST_INIT
> gst.c:613:init_pre: Initializing GStreamer Core Library version 0.10.36
> 0:00:00.000485536 31059  0xa0bf070 INFO                GST_INIT
> gst.c:614:init_pre: Using library installed in /home/user/BIN/lib
> 0:00:00.000495006 31059  0xa0bf070 INFO                GST_INIT
> gst.c:624:init_pre: Linux ubuntu 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4
> 11:13:04 UTC 2012 i686
>  [[...]]
> 0:00:00.904396010 31156  0x8232070 DEBUG     GST_PLUGIN_LOADING
> gstplugin.c:1293:gst_plugin_load_by_name: looking up plugin alsa in default
> registry
> 0:00:00.904410607 31156  0x8232070 DEBUG     GST_PLUGIN_LOADING
> gstplugin.c:1296:gst_plugin_load_by_name: loading plugin alsa from file
> /home/user/BIN/lib/gstreamer-0.10/libgstalsa.so
> 0:00:00.904419281 31156  0x8232070 DEBUG     GST_PLUGIN_LOADING
> gstplugin.c:737:gst_plugin_load_file: attempt to load plugin
> "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so"
> 0:00:00.905904303 31156  0x8232070 LOG       GST_PLUGIN_LOADING
> gstplugin.c:834:gst_plugin_load_file: Plugin 0x824ba20 for file
> "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so" prepared, calling entry
> function...
> 0:00:00.905922400 31156  0x8232070 LOG       GST_PLUGIN_LOADING
> gstplugin.c:841:gst_plugin_load_file: Plugin 0x824ba20 for file
> "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so" prepared, registering...
> 0:00:00.905933556 31156  0x8232070 LOG       GST_PLUGIN_LOADING
> gstplugin.c:540:gst_plugin_register_func: plugin
> "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so" looks good
>
> (gst-inspect-0.10:866): GLib-GObject-WARNING **: cannot register existing
> type `GstObject'
>
> (gst-inspect-0.10:866): GLib-CRITICAL **: g_once_init_leave: assertion
> `initialization_value != 0' failed
>
> (gst-inspect-0.10:866): GLib-GObject-CRITICAL **: g_type_register_static:
> assertion `parent_type > 0' failed
> __________________________________________
>
> And, here's a backtrace from gdb where the program is hanging:
> __________________________________________
>
> $ ps -aux | grep inspect
>  fritzkatz   32146  0.0  0.1   9552  3036 pts/0    S    19:12   0:00
> /home/user/BIN/bin/gst-inspect-0.10 alsasink
>
> $ gdb /home/user/BIN/bin/gst-inspect-0.10 32146
>
>  [[...]]
>
> warning: Unable to find dynamic linker breakpoint function.
> GDB will be unable to debug shared library initializers
> and track explicitly loaded dynamic code.
> 0x0012d422 in __kernel_vsyscall ()
>
> (gdb) bt
> #0  0x0012d422 in __kernel_vsyscall ()
> #1  0x003aa015 in ?? ()
> #2  0x0066b738 in ?? ()
> #3  0x0067e98b in ?? ()
> #4  0x005948c2 in ?? ()
> #5  0x00596482 in ?? ()
> #6  0x080929a6 in gst_plugin_register_func (plugin=0x80f70bc, desc=0x0,
> user_data=<value optimized out>) at gstplugin.c:557
> #7  0x080943c3 in gst_plugin_load_file (filename=0x8125c40
> "/home/user/BIN/lib/gstreamer-0.10/libgstalsa.so",
>    error=0xbffff04c) at gstplugin.c:843
> #8  0x08094fb9 in gst_plugin_load_by_name (name=0x8125c10 "alsa") at
> gstplugin.c:1297
> #9  0x08095a68 in gst_plugin_feature_load (feature=0x81262d0) at
> gstpluginfeature.c:111
> #10 0x08051f36 in print_element_info (factory=0xfffffe00, print_names=0) at
> gst-inspect.c:1332
> #11 0x0805315f in main (argc=2, argv=0xbffff324) at gst-inspect.c:1619
>
>
>
> --
> View this message in context: http://gstreamer-devel.966125.n4.nabble.com/Building-a-stand-alone-static-debug-g-version-of-GStreamer-tp4650852.html
> Sent from the GStreamer-devel mailing list archive at Nabble.com.
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Building a stand-alone, static, debug'-g' version of GStreamer

FritzKatz
Thank you Luis!  Works great!

For future reference, anyone google-searching into this thread that are behind a firewall like me will need to modify the gst-uninstalled scripts to do "http-dumb-git". For example:
   
    $ git clone http://anongit.freedesktop.org/git/gstreamer/gstreamer.git 

and
    gstreamer.doap:    
        <location rdf:resource="http://anongit.freedesktop.org/gstreamer/gstreamer.git"/>

instead of:
    gstreamer.doap_ORIG:    
        <location rdf:resource="git://anongit.freedesktop.org/gstreamer/gstreamer"/>