移植交叉编译过的phonon库
qt源码编译后,将对应的QT目标文件夹下lib文件夹中的
以libphonon开头的几个文件打包压缩,复制到arm板对应的QT文件夹中lib目录下
测试qt程序,让qt程序播放一个mp4文件
报错:
phonon backend plugin could not be loaded
原因是plugins文件夹缺少相应的phonon_backend
查找解决方案
安装播放插件有两种解决方案:
1.使用gstreamer
2.使用mplayer
看了大家的经验选择使用mplayer
下载phonon_mplayer
git clone git://anongit.kde.org/phonon-mplayer
之后进入文件夹
cmake . -DCMAKE_C_COMPILER=arm-linux-gcc -DCMAKE_CXX_COMPILER=arm-linux-g++
生成Makefile
并将得到phonon_mplayer.so文件,放到Qt安装路径的/plugins/phonon_backend/目录下
接下来, 再使进入到QT源文件夹下对应的phonon文件夹,编译Qt源文件下的phonon模块,这时会自动根据phonon_mplayer.so编译适合mplayer插件的phonon
将编译好的libphonon.la、libphonon.so、libphonon.so.4、libphonon.so.4.3 、 libphonon.so.4.3.1模块复制到目标板Qt安装路径的lib目录下
进入/phonon-mplayer/mplayer执行
qmake
make(如不是第一次make,执行make clean)
此时观察输出,如发现使用的编译器是gcc或g++,择编译器使用的不正确,一般会编译不成功,出现如下字样
/usr/bin/ld: skipping incompatible /usr/local/freescale/qt4.8.5/lib/libphonon.so when searching for -lphonon
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i686-linux-gnu/4.6/…/…/…/…/lib/libphonon.so when searching for -lphonon
/usr/bin/ld: skipping incompatible /usr/lib/…/lib/libphonon.so when searching for -lphonon
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i686-linux-gnu/4.6/…/…/…/libphonon.so when searching for -lphonon
/usr/bin/ld: skipping incompatible /usr/lib/libphonon.so when searching for -lphonon
/usr/bin/ld: cannot find -lphonon
/usr/bin/ld: skipping incompatible /usr/local/arm/tslib/lib/libts.so when searching for -lts
/usr/bin/ld: cannot find -lts
collect2: ld returned 1 exit status
make: *** [phonon_backend/libphonon_mplayer.so] Error 1
此时是makefile中编译器选项的问题 查看目录下的Makefile文件确实配置有问题
cc=gcc
cxx=g++
。。。
手动修改makefile(主要看开头)
如果说找不到QT的什么文件,可以修改对应的include路径和lib路径
#############################################################################
# Makefile for building: libphonon_mplayer.so
# Generated by qmake (2.01a) (Qt 4.8.1) on: Wed Dec 26 16:41:35 2018
# Project: phonon_mplayer.pro
# Template: lib
# Command: /usr/bin/qmake -o Makefile phonon_mplayer.pro
#############################################################################
####### Compiler, tools and options
CC = arm-none-linux-gnueabi-gcc
CXX = arm-none-linux-gnueabi-g++
DEFINES = -DQT_WEBKIT -DPHONON_MAKE_QT_ONLY_BACKEND -DQT_NO_DEBUG -DQT_PLUGIN -DQT_PHONON_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS = -pipe -O2 -D_REENTRANT -Wall -W -fPIC $(DEFINES)
CXXFLAGS = -pipe -O2 -D_REENTRANT -Wall -W -fPIC $(DEFINES)
INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/local/freescale/qt4.8.5/include -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/phonon -I/usr/include/qt4-I/usr/include/qt4/phonon_compat -I.
LINK = arm-none-linux-gnueabi-g++
LFLAGS = -Wl,-O1 -shared
LIBS = $(SUBLIBS) -L/usr/local/freescale/qt4.8.5/lib -lphonon -L/usr/local/arm/tslib/lib -L/usr/lib/i386-linux-gnu -lQtNetwork -lts -lQtGui -lQtCore -lpthread
AR = arm-none-linux-gnueabi-ar
RANLIB =
QMAKE = /usr/local/freescale/qt4.8.5/bin
TAR = tar -cf
COMPRESS = gzip -9f
COPY = cp -f
SED = sed
COPY_FILE = $(COPY)
COPY_DIR = $(COPY) -r
STRIP = strip
INSTALL_FILE = install -m 644 -p
INSTALL_DIR = $(COPY_DIR)
INSTALL_PROGRAM = install -m 755 -p
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
MOVE = mv -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p
####### Output directory
OBJECTS_DIR = ./
####### Files
SOURCES = libmplayer/MyProcess.cpp \
libmplayer/MediaData.cpp \
libmplayer/MediaSettings.cpp \
libmplayer/MPlayerVersion.cpp \
libmplayer/MPlayerProcess.cpp \
libmplayer/MPlayerLoader.cpp \
libmplayer/WidgetNoPaintEvent.cpp \
libmplayer/MPlayerVideoWidget.cpp \
libmplayer/MPlayerConfig.cpp \
Backend.cpp \
MediaObject.cpp \
MediaController.cpp \
VideoWidget.cpp \
AudioOutput.cpp \
EffectManager.cpp \
Effect.cpp \
SinkNode.cpp \
SeekStack.cpp moc_MyProcess.cpp \
moc_MPlayerProcess.cpp \
moc_WidgetNoPaintEvent.cpp \
moc_MPlayerVideoWidget.cpp \
moc_Backend.cpp \
moc_MediaObject.cpp \
moc_MediaController.cpp \
moc_VideoWidget.cpp \
moc_AudioOutput.cpp \
moc_EffectManager.cpp \
moc_Effect.cpp \
moc_SinkNode.cpp \
moc_SeekStack.cpp
OBJECTS = MyProcess.o \
MediaData.o \
MediaSettings.o \
MPlayerVersion.o \
MPlayerProcess.o \
MPlayerLoader.o \
WidgetNoPaintEvent.o \
MPlayerVideoWidget.o \
MPlayerConfig.o \
Backend.o \
MediaObject.o \
MediaController.o \
VideoWidget.o \
AudioOutput.o \
EffectManager.o \
Effect