gstreamer移植qnx:交叉编译gstreamer之 libgstreamer

Posted 玄道公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gstreamer移植qnx:交叉编译gstreamer之 libgstreamer相关的知识,希望对你有一定的参考价值。

一、简介

​ 这里使用的gstreamer是1.16.1版本,移植使用的qnx版本为6.6.

二、使用configure方式编译

2.1 编写配置用的脚本

这里为了方便,将./configure xx之类的东西写入一个shell脚本当中, 其文件名为:myconfig.sh,其内容如下:

./configure --prefix=/media/guwen/workspace/project/gstreamer/out \\
			--build=i686-linux \\
			--host=arm-unknown-nto-qnx6.6.0eabi \\
			LDFLAGS="-L/media/guwen/workspace/project/gstreamer/out/lib" \\
			CFLAGS="-I/media/guwen/workspace/project/gstreamer/out/include" \\
			GLIB_LIBS="-lintl -lglib-2.0 -lgio-2.0 -lgobject-2.0"

2.2 修改编译错误

​ 使用qnx 的toolchain,会出现编译错误, 因此需要修改某些文件

  • 修改plugins/elements/gstfilesink.c文件

修改420行

/**原始版本*/
if (gst_file_sink_flush_buffer (sink) != GST_FLOW_OK)
       GST_ELEMENT_ERROR (sink, RESOURCE, CLOSE,
           (_("Error closing file \\"%s\\"."), sink->filename), NULL);

/** 修改版本 */
if (gst_file_sink_flush_buffer (sink) != GST_FLOW_OK)
       GST_ELEMENT_ERROR (sink, RESOURCE, CLOSE,
           (_("Error closing file \\"%s\\"."), sink->filename), (NULL));

修改612行

/** 原始版本 */
GST_ELEMENT_ERROR (filesink, RESOURCE, WRITE,
        (_("Error while writing to file \\"%s\\"."), filesink->filename), NULL);

/** 修改版本 */
GST_ELEMENT_ERROR (filesink, RESOURCE, WRITE,
         (_("Error while writing to file \\"%s\\"."), filesink->filename), (NULL));

2.3 编译过程

  • 进行配置
./myconfig.sh
  • 编译与安装
make 
make install

三、使用meson进行编译

3.1 编写meson的cross file文件

[host_machine]
system = 'qnx'
cpu_family = 'arm'
cpu = 'armv7'
endian = 'little'


[binaries]
c = 'arm-unknown-nto-qnx6.6.0eabi-gcc'
cpp = 'arm-unknown-nto-qnx6.6.0eabi-g++'
ar = 'arm-unknown-nto-qnx6.6.0eabi-ar'
strip = 'arm-unknown-nto-qnx6.6.0eabi-strip'
pkgconfig  = 'pkg-config'


[properties]
c_args = ['-D_QNX_SOURCE=1']
c_link_args = ['-lsocket', '-L/media/guwen/workspace/project/gstreamer/out/lib', 
               '-lintl', '-lglib-2.0', '-lgio-2.0', '-lgobject-2.0', '-lffi' ]
cpp_args = ['-D_QNX_SOURCE=1']
cpp_link_args = ['-lsocket', '-L/media/guwen/workspace/project/gstreamer/out/lib', 
                 '-lintl', '-lglib-2.0', '-lgio-2.0', '-lgobject-2.0', '-lffi']

[paths]
prefix = '/media/guwen/workspace/project/gstreamer/out'

3.2 修改meson.build 文件

  • 首先修改default_options
  default_options : [ 'warning_level=1',
                      'buildtype=release', /** 修改编译类型为release */
                      'gtk_doc=disabled',  /** 禁用gtk_doc特征 */
                      'c_std=gnu99' ])     /** 使用gnu99标准编译 */

  • 新增头文件检测

按照以上进行meson编译,发现会出现错误,是因为在meson.build中没有进行sys/uio.h这个头文件的检测,需要加上,其内容如下:

check_headers = [
  'dlfcn.h',
  'inttypes.h',
  'memory.h',
  'poll.h',
  'stdint.h',
  'stdio_ext.h',
  'strings.h',
  'string.h',
  'sys/param.h',
  'sys/poll.h',
  'sys/prctl.h',
  'sys/socket.h',
  'sys/stat.h',
  'sys/times.h',
  'sys/time.h',
  'sys/types.h',
  'sys/utsname.h',
  'sys/wait.h',
  'ucontext.h',
  'unistd.h',
  'valgrind/valgrind.h',
  'sys/resource.h',
  'sys/uio.h',
]

3.3 编译过程

export PKG_CONFIG_LIBDIR=/media/guwen/workspace/project/gstreamer/out/lib/pkgconfig
mkdir build
cd build
meson .. --cross-file ../qnx_arm.txt
ninja
ninja install

以上是关于gstreamer移植qnx:交叉编译gstreamer之 libgstreamer的主要内容,如果未能解决你的问题,请参考以下文章

gstreamer移植qnx:交叉编译gstreamer之 libgstreamer

基于arm5718的交叉编译gstreamer移植

基于arm5718的交叉编译gstreamer移植

gstreamer移植qnx:概览篇

gstreamer移植qnx:编写gstreamer插件audio sink和video sink

GStreamer在Linux平台的交叉编译