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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值