现在的位置: 首页 > 综合 > 正文

安装gstreamer到ARMv6平台

2013年08月29日 ⁄ 综合 ⁄ 共 3303字 ⁄ 字号 评论关闭

最近老大发话,要把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了。

抱歉!评论已关闭.