2024年1月24日发(作者:)

安装gstreamer到ARMv6平台

PC linux是Ubuntu8.10。

(1)当然是安装交叉编译环境,我用的是CodeSourcery(同事那里copy过来的,可以免费下载的)。解压以后是一个可以直接运行(它需要一个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,把 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

int main (int argc, char *argv[])

{

const gchar *nano_str;

guint major, minor, micro, nano;

gst_init (NULL, NULL);

gst_version (&major, &minor, µ, &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 %sn", 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

生成一个,这个文件可以在arm linux上运行。打印出:

This program is linked against GStreamer 0.10.23

解下来就可以把arm chip上的IP封装成gstreamer的plugin了。


更多推荐

安装,编译,下载,交叉,运行