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
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,然后保存退出,更改后如下:
再次重新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
运行程序出现错误
libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found参考这篇文章下载ARM平台的libstdc++.so.6.0.13,注意版本不一样,把这个文件拷贝到开发板的/usr/lib目录下并重命名为libstdc++.so.6
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:/lib6、拷贝一个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
相关文章推荐
- 基于Ubuntu14.04环境下编译qt-everywhere-opensource-src-5.6.1配置qt creater 的arm编译器环境并移植到tiny210v2开发板上
- ubuntu14.04下安装qt4.8.6 +qt creator
- ubuntu14.04安装qt4.8.6
- ubuntu14.04下安装配置Qt4.8.6
- ubuntu14.04 osg3.0.1 qt4.8.6 boost1.58编译安装
- Ubuntu 14.04 安装 Qt4.8.6
- ubuntu14.04下安装qt4.8.6 +qt creator
- Ubuntu14.04安装QT4.8.6和QT Creator
- Ubuntu14.04 静态编译安装Qt4.8.6
- Ubuntu14.04 静态编译安装Qt4.8.6
- qt 4.8.6 ubuntu14.04环境安装
- Ubuntu12.04下配置安装Qt4.6.3 及移植到mini2440开发板及其使用全过程
- qt在linux与ok6410上的安装移植(4)——插曲:ok6410与ubuntu的nfs共享
- 【原创】车载实时路况信息接收终端移植于Smart210开发板---步骤3之Ubuntu12.04的QT安装和配置
- Ubuntu 14.04 安装 Qt 5.3.0 (默认已包含Qt Creator 3.1.1)
- qt-embedded-linux-opensource-src-4.8.6 + tslib-1.4 + qwt-6.0.2 编译和移植到mini2440开发板
- 将QT程序移植到arm2440开发板上
- 【原创】车载实时路况信息接收终端移植于Smart210开发板---步骤3之Ubuntu12.04的QT安装和配置
- How to port Ubuntu 11.10 to Beagleboard 怎样移植Ubuntu 11.10 到BeagleBoard
- Ubuntu12.04下配置安装Qt4.6.3 及移植到mini2440开发板及其使用全过程