gstreamer arm make

最近老大发话,要把gstreamer安装到ARMv6平台上,为了以后在ARM linux上开发多媒体应用做准备。安装过程遇到了很多问题,作个笔记,也好给大家作个参考。我的PC linux是Ubuntu8.10。
          (1)当然是安装交叉编译环境,我用的是CodeSourcery(同事那里copy过来的,可以免费下载的)。解压以后是一个arm- 2008q3-72-arm-none-linux-gnueabi.bin可以直接运行(它需要一个java虚拟机)。安装过程中犯了一个错误,这个安 装文件文件不能在远程登陆界面运行(因为安装过程有图形界面)。默认安装完以后,在/root下有一个CodeSourcery目录, arm gcc就安装在这个目录下。为了可以在任何目录下运行交叉编译器。在环境变量中增加/root/CodeSourcery /Sourcery_G++_Lite/bin。
            (2)交叉编译安装glib和libxml2(因为gstreamer依赖于这两个库)。glib可以到gtk的官方网站下载,我下载的是2.20.4版本。libxml2 Google或者baidu一下就可以下到了,我下的是2.6.26。
              创建一个文件夹/root/gstreamer_lib_for_arm,glib和libxml2库就安装到这个目录下。下面开始交叉编译glib,把 glib-2.20.4.tar.gz copy到/root下,解压,进入glib-2.20.4,用下面的命令执行configure动作:
            CC=arm-none-linux-gnueabi-gcc ./configure --build=i686-linux --host=arm-none-linux-gnueabi --prefix=/root/gstreamer_lib_for_arm glib_cv_stack_grows=no glib_cv_uscore=no ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes ac_cv_lib_rt_clock_gettime=no glib_cv_monotonic_clock=yes
              这个命令我也是google上搜索到的(忘了是哪个大侠写,真是对不起这位大侠了),意思好像是:
              CC=arm-none-linux-gnueabi-gcc :指定使用arm-none-linux-gnueabi-gcc 作为编译器;
            --build=i686-linux :我们是在686计算机的linux操作系统上进行编译;
            --host=arm-none-linux-gnueabi :我们编译出来的东西要在arm平台的linux系统下运行;
            --prefix=/root/gstreamer_lib_for_arm :编译出来的目标文件安装到哪个目录;
            剩下的参数不懂;
            这个configure的过程会出好几个错误,依赖库gettext,flex,bison找不到,这些库是在编译的时候用到,直接下载相应的 ubuntu的i386(我的PC不是AMD CPU)的deb软件包安装就可以了。重新执行上面的命令,这次没问题了。然后 make && make install。
             
              交叉编译安装libxml2也是一样:先解压,然后执行configure命令:
              CC=arm-none-linux-gnueabi-gcc ./configure --build=i686-linux --host=arm-none-linux-gnueabi --prefix=/root/gstreamer_lib_for_arm
              成功之后在 make && make install。
              (3)交叉编译安装gstreamer。gstreamer源代码可以到gstreamer的官方网站下载,我下载的版本是0.10.23。configure命令:
                CC=arm-none-linux-gnueabi-gcc PKG_CONFIG_PATH=/root/gstreamer_lib_for_arm/lib/pkgconfig ./configure --build=i686-linux --host=arm-none-linux-gnueabi --prefix=/root/gstreamer_lib_for_arm CFLAGS=-I/root/gstreamer_lib_for_arm/include --disable-registry --disable-loadsave --disable-gtk-doc ac_cv_func_register_printf_function=no --disable-tests --disable-valgrind --disable-debug --disable-gst-debug
                成功后,make && make install。这样gstreamer就交叉编译完成了。把/root/gstreamer_lib_for_arm下的所有*.so(动态链接 库)copy到nfs下,这样在arm上运行gstreamer的应用程序的时候就可以找到需要的库了。
                (4)写一个helloworld.c测试一下:
                #include <gst/gst.h>
                int main (int argc, char *argv[])
                {
                        const gchar *nano_str;
                        guint major, minor, micro, nano;
                        gst_init (NULL, NULL);
                        gst_version (&major, &minor, &micro, &nano);
                        if (nano == 1)
                                nano_str = "(CVS)";
                        else if (nano == 2)
                                nano_str = "(Prerelease)";
                        else
                                nano_str = "";
                        printf ("This program is linked against GStreamer %d.%d.%d %s\n", major, minor, micro, nano_str);
                      return 0;
              }
             
                编译,glib.h gst.h在/root/gstreamer_lib_for_arm/include目录下,需要 -I指定:
                arm-none-linux-gnueabi-gcc helloworld.c -I /root/gstreamer_lib_for_arm/include/glib-2.0 -I /root/gstreamer_lib_for_arm/lib/glib-2.0/include -I /root/gstreamer_lib_for_arm/include/gstreamer-0.10 -L /root/gstreamer_lib_for_arm/lib -l gstreamer-0.10 -l glib-2.0 -l gmodule-2.0 -l gobject-2.0 -l gthread-2.0
                生成一个a.out,这个文件可以在arm linux上运行。打印出:
                This program is linked against GStreamer 0.10.23
                解下来就可以把arm chip上的IP封装成gstreamer的plugin了。
楼主你好。我也是要交叉编译gstreamer,按照你的步骤,已经编译了glib和libxml2,在编译gstreamer 时,configure遇到如下提示,就停止了,没有生成makefile文件。 checking flex version 2.5.4 >= 2.5.31... configure: error: no 我看了一下系统中的flex版本是2.5.4,下的gstreamer的版本是0.10.24,是不是因为flex版本太高了,0.10.24的 gstreamer不支持?在官方网站上0.10.24是最新版本了。
找到问题了,原因就是flex版本太高了,我把2.5.4的版本卸掉,把flex2.5.31装上去,gstreamer就编译通过了。谢谢楼主这篇博文,给我帮助很大呢。。呵呵

你可能感兴趣的:(职场,休闲)