您的位置:首页 > 编程语言 > Qt开发

ubuntu14.04安装arm版QT4.8.6(QtEmbedded-4.8.6-arm)并移植到开发板beagleboard-xm

2016-12-26 19:07 766 查看
准备:下载qt-everywhere-opensource-src-4.8.6.tar.gz并复制到ubuntu目录中

1、进入存放qt源码的目录解压源码包

tar xzvf qt-everywhere-opensource-src-4.8.6.tar.gz

2、进入解压的源码目录

./configure -v -prefix /usr/local/Trolltech/QtEmbedded-4.8.6-arm -opensource -confirm-license -embedded arm -release -shared -fast -no-largefile -qt-sql-sqlite -qt3support -no-xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg -make libs -make tools -make examples -make demos -make translations -no-nis -no-cups -iconv -no-dbus -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,24,32 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-kbd-qvfb -armfpa -no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib -DQT_QLOCALE_USES_FCVT -I/opt/tslib-1.4/include -L/opt/tslib-1.4/lib
-prefix /usr/local/Trolltech/QtEmbedded-4.8.6-arm表示arm板qt4.8.6安装到/usr/local/Trolltech/QtEmbedded-4.8.6-arm

-embedded arm编译针对arm平台的embedded版本

-xplatform qws/linux-arm-g++使用linux-arm-g++交叉编译器进行交叉编译

-qt-mouse-tslib将使用tslib来驱动触摸屏

-I后面指定上一步tslib的include路径

-L后面指定上一步tslib的lib路径

运行./configure会出现下列错误

instruction: `swpb %al,%bpl,[%edi]'
../../include/QtCore/../../src/corelib/arch/qatomic_armv5.h:131: Error: no such instruction: `swpb %cl,%dl,[%edi]'
../../include/QtCore/../../src/corelib/arch/qatomic_armv5.h:131: Error: no such instruction: `swpb %cl,%dl,[%edi]'
../../include/QtCore/../../src/corelib/arch/qatomic_armv5.h:131: Error: no such instruction: `swpb %al,%bpl,[%edi]'
../../include/QtCore/../../src/corelib/arch/qatomic_armv5.h:131: Error: no such instruction: `swpb %cl,%dl,[%edi]'
../../include/QtCore/../../src/corelib/arch/qatomic_armv5.h:131: Error: no such instruction: `swpb %cl,%dl,[%edi]'
../../include/QtCore/../../src/corelib/arch/qatomic_armv5.h:131: Error: no such instruction: `swpb %al,%bpl,[%edi]'
../../include/QtCore/../../src/corelib/arch/qatomic_armv5.h:131: Error: no such instruction: `swpb %sil,%cl,[%edi]'
make[1]: *** [.obj/release-shared-emb-arm/qabstractanimation.o] Error 1
make[1]: Leaving directory `/home/li/QT-ARM/qt-everywhere-opensource-src-4.8.6/src/corelib'
make: *** [sub-corelib-make_default-ordered] Error 2
li@ubuntu:~/QT-ARM/qt-everywhere-opensource-src-4.8.6$ make

可能是arm 交叉环境有问题,如果配置好了一般reconfigure下就ok.如果总是有问题,可以修改qatomic_armv5.h,将汇编用c code写可以避过这个错误。改inline char q_atomic_swp为以下内容
sudo gedit ​/home/li/QT-ARM/qt-everywhere-opensource-src-4.8.6/src/corelib/arch/qatomic_armv5.h​

inline char q_atomic_swp(volatile char *ptr, char newval)

{

register char ret;

/*asm volatile("swpb %0,%2,[%3]"

: "=&r"(ret), "=m" (*ptr)

: "r"(newval), "r"(ptr)

: "cc", "memory");*/

ret=*ptr;

*ptr=newval;

return ret;

}
3、编译源码

make

出现下列错误

../../include/QtCore/../../src/corelib/arch/qatomic_armv5.h:145:1: error: stray ‘\200’ in program
../../include/QtCore/../../src/corelib/arch/qatomic_armv5.h:145:1: error: stray ‘\213’ in program
make[1]: *** [.pch/release-shared-emb-arm/QtCore.gch/c++] Error 1
make[1]: Leaving directory `/home/li/QT-ARM/qt-everywhere-opensource-src-4.8.6/src/corelib'
make: *** [sub-corelib-make_default-ordered] Error 2

原因就是在第2步修改qatomic_armv5.h​时,是直接从网页上复制的代码,某些英文的符号变成中文的格式而自己却不知道。这里找到定位的代码行把符号删掉重新输入英文的符号在重新make
修改完成重新make又出现下面错误

skipping incompatible /opt/tslib-1.4/lib/libts.so when searching for -lts
/opt/../ld:cannot find -lts出现以上问题的原因很明显,你的libts.so与./configure里指定的平台不兼容。即tslib库文件生成的不对,你的交叉编译环境有问题。参考安装tslib1.4。回到tslib重新安装,使用一下命令配置tslib:

./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ -host=arm-none-linux-gnueabi -prefix=/opt/tslib-1.4 ac_cv_func_malloc_0_nonnull=yes
然后同时指定交叉编译器

打开qt源码解压目录下的mkspecs/qws/linux-arm-g++/qmake.conf:

sudo gedit mkspecs/qws/linux-arm-g++/qmake.conf

用gedit打开qmake.conf 后,加上-lts,然后保存退出,更改后如下:

# modifications to g++.conf
QMAKE_CC = arm-linux-gcc -lts
QMAKE_CXX = arm-linux-g++ -lts
QMAKE_LINK = arm-linux-g++ -lts
QMAKE_LINK_SHLIB = arm-linux-g++ -lts
# modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs
QMAKE_OBJCOPY = arm-linux-objcopy
QMAKE_STRIP = arm-linux-strip

再次重新make出现下面错误

>::deref()]+0x30): undefined reference to `__sync_sub_and_fetch_4'
collect2: ld returned 1 exit status
make[1]: *** [../../lib/libQtScript.so.4.8.6] Error 1
make[1]: Leaving directory `/home/li/qt-everywhere-opensource-src-4.8.6/src/script'
make: *** [sub-script-make_default-ordered] Error 2

下面参考这两篇文章可以解决
移植Qt-4.8.5出现undefined reference to '__sync_sub_and_fetch_4'解决方法

基于嵌入式Linux下GCC编译器__sync_sub_and_fetch_4错误的解决心得

参考第一篇操作,第二篇下载gcc-4.6.0.tar.gz

如果能解决掉undefined reference to `__sync_sub_and_fetch_4'再好不过了,但是我的错误没有解决掉。知道是gcc编译器版本太低的原因,所以只能换高版本的编译器。换成了友善之臂的arm-linux-gcc-4.4.3,安装方法网上有很多。使用4.4.3版本最终解决掉了所以错误,make顺利完成。

最后安装,sudo make install

4、移植到beagleboard-xm开发板

在开发板上运行QT程序则开发板需要有QT程序所依赖的库文件,这里我们把在linux主机上编译安装的QtEmbedded-4.8.6-arm下面的lib文件夹拷贝到开发板上即可。

我使用的是scp命令把lib文件夹传输到开发板上的,具体用什么办法只要传输过去都可以。

scp -r /usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin root@192.168.1.9:/usr/local/Qt4.8.6QT库放到开发板/usr/local/Qt4.8.6目录下
5、配置开发板环境变量

vi /etc/profile
在文件添加下面内容
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/event0
export QWS_SIZE=800*480
export QWS_DISPLAY=LinuxFB:mmWidth80:mmHeight80:0
export QTDIR=/usr/local/Qt4.8.6
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export LD_LIBRARY_PATH=/usr/local/tslib/lib:/usr/local/Qt4.8.6/lib:/usr/local/lib:$LD_LIBRARY_PATH:$TSLIB_ROOT/lib:$QTDIR/lib:/lib
6、拷贝一个linux主机上QtEmbedded-4.8.6-arm/example目录下的一个可执行文件进行测试
运行程序出现错误

libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found参考这篇文章下载ARM平台的libstdc++.so.6.0.13,注意版本不一样,把这个文件拷贝到开发板的/usr/lib目录下并重命名为libstdc++.so.6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: