qtgstreamer移植arm

准备:

cd QtGstreamer源码
mkdir build && cd build

arm.cmake文件内容如下(用于定义cmake交叉编译相关):

message(STATUS “arm”)
include (CMakeForceCompiler)
set(CMAKE_CROSSCOMPILING TRUE)
set(QT_VERSION “5”)
set(OE_QMAKE_PATH_EXTERNAL_HOST_BINS /opt/rk-x11/2.2.4/sysroots/x86_64-rksdk-linux/usr/bin/qt5/)
set(CMAKE_SYSTEM_NAME “Linux”)
set(CMAKE_SYSTEM_PROCESSOR “arm-rk”)
set(CMAKE_C_COMPILER /opt/rk-x11/2.2.4/sysroots/x86_64-rksdk-linux/usr/bin/arm-rk-linux-gnueabi/arm-rk-linux-gnueabi-gcc cache string “arm-linux-gcc”)
set(CMAKE_CXX_COMPILER /opt/rk-x11/2.2.4/sysroots/x86_64-rksdk-linux/usr/bin/arm-rk-linux-gnueabi/arm-rk-linux-gnueabi-g++ cache string “arm-linux-g++”)
set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} -Wall -pedantic -march=armv7ve -mfpu=neon-vfpv4 -mfloat-abi=hard -DQT_NO_OPENGL_ES_3 -DQT_NO_OPENGL_ES_3_1”)
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -Wall -pedantic -march=armv7ve -mfpu=neon-vfpv4 -mfloat-abi=hard –sysroot=/opt/rk-x11/2.2.4/sysroots/cortexa17hf-neon-vfpv4-rk-linux-gnueabi -DQT_NO_OPENGL_ES_3 -DQT_NO_OPENGL_ES_3_1”)
CMAKE_FORCE_C_COMPILER(/opt/rk-x11/2.2.4/sysroots/x86_64-rksdk-linux/usr/bin/arm-rk-linux-gnueabi/arm-rk-linux-gnueabi-gcc GNU)
CMAKE_FORCE_CXX_COMPILER(/opt/rk-x11/2.2.4/sysroots/x86_64-rksdk-linux/usr/bin/arm-rk-linux-gnueabi/arm-rk-linux-gnueabi-g++ GNU)
set(QT_ROOT /opt/Qt5.7.1/5.7/gcc_64)
link_directories(/opt/rk-x11/2.2.4/sysroots/cortexa17hf-neon-vfpv4-rk-linux-gnueabi/lib/)
set(CMAKE_FIND_ROOT_PATH /opt/rk-x11/2.2.4/sysroots/cortexa17hf-neon-vfpv4-rk-linux-gnueabi/)
set(CMAKE_SYSROOT “/opt/rk-x11/2.2.4/sysroots/cortexa17hf-neon-vfpv4-rk-linux-gnueabi/” “/opt/rk-x11/2.2.4/sysroots/cortexa17hf-neon-vfpv4-rk-linux-gnueabi/lib/” )
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
message(“CROSS COMPILE : ${CMAKE_CROSSCOMPILING}”)

CMakeList.txt(位于源码顶层目录)文件project(QtGStreamer)下面加入一下三行:
if(DEFINED ARCH AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/build/${ARCH}.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/build/${ARCH}.cmake)
endif(DEFINED ARCH AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/build/${ARCH}.cmake)

编译:

cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gstreamer/qt-gstreamer-1.2.0/arm/install -DARCH=arm
make && make install
完事之后把install下的头文件和库文件考到交叉编译妻环境及板子,并把build/elements/gstqtvideosink/libgstqt5videosink.so文件考板子gstreamer插件目录。

这里本应该通过
-DCMAKE_TOOLCHAIN_FILE=arm.cmake参数让cmake以交叉编译定义文件的形式加载该文件,但似乎未起作用,这里自己简单实现ARCH参数加载。
编译中可能出现些问题,通过set(CMAKE_C_COMPILER /xxx/arm-linux-gcc)定义的交叉编译工具并未成功,可能实际用的还是x86-gcc,甚至在set用cache选项或者是强制宏CMAKE_FORCE_C_COMPILER都不好使,可能是被什么地方缓存了,可以把/usr/bin/下的g++/c++/cc/gcc视情况看cmake在使用谁就改下谁的名,让cmake找不到一次就会采用我们设置的 CMAKE_C_COMPILER 编译器了,之后可以放心改回来。

另附x86版编译:

同样是build目录
x86.cmake(x86 cmake定义)
message(STATUS “x86”)

set(QT_VERSION “5”)
set(QT_QMAKE_EXECUTABLE /opt/Qt5.7.1/5.7/gcc_64/bin/qmake)

set(QT_ROOT /opt/Qt5.7.1/5.7/gcc_64)
set(CMAKE_FIND_ROOT_PATH CMAKE_FIND_ROOT_PATH ${QT_ROOT}/lib/cmake)
message(STATUS “Q VERSION :${Qt5Core_VERSION}”)

INCLUDE_DIRECTORIES(/usr/lib/x86_64-linux-gnu/gstreamer-1.0/include) #项目管理中遗漏了该路径

编译:

cmake .. -DARCH=x86 -DCMAKE_INSTALL_PREFIX=/opt/gstreamer/qt-gstreamer-1.2.0/install
make && make innstall

编译生成一系列文件,这里用于qml的有如下库:
qt5lib下支持库:
libQt5GLib-2.0.so.xxx
libQt5GStreamer-1.0.so.xxx
libQt5GStreamerQuick-1.0.so.xxx
qt5/qml下compoment组件:
QtGStreamer(文件夹)
–libQtGStreamerQuick2.so
–qmldir
gstreamer插件:
libgstqt5videosink.so

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值