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