1、rootfs中部署QT库

(1)QT库复制

1.  把/home/liu/qt/qt5.6/install_file 下的 lib  整个复制到开发板的根文件系统中

cp /home/liu/qt/qt5.6/install_file/lib  /home/liu/ARM/rootfs/rootfs2/QT5.6.2/

2.  把/home/liu/qt/qt5.6/install_file 下的 plugins 整个复制到开发板的根文件系统中

cp /home/liu/qt/qt5.6/install_file/plugins  /home/liu/ARM/rootfs/rootfs2/QT5.6.2/

(2)导出环境变量

vi /etc/profile

export QTEDIR=/QT5.6.2
export LD_LIBRARY_PATH=/QT5.6.2/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=/QT5.6.2/plugins   
export QT_QPA_FONTDIR=/QT5.6.2/lib/fonts            
export QT_QPA_FB_TSLIB=1    
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event2          
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1024x600:mmSize=1024x600:offset=0x0:tty=/dev/tty1

2、开发板中运行QT应用

(1)拷贝和执行
(2)问题解决和现象观察

问题1:找不到libQtxx            
解决:部署QT库等文件并导出环境变量

问题2:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解决:C++库在交叉编译工具链中,复制进去即可。

cp /usr/local/arm_x210/bianyilian/arm-2009q3/arm-none-linux-gnueabi/libc/thumb2/usr/lib/libstdc++*so* /home/liu/ARM/rootfs/rootfs2/lib/ -f
 

问题3:QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
解决:缺少一个运行时库preloadable_libiconv.so,交叉编译得到这个后放进去/lib目录下即可。

步骤1:

cp /mnt/hgfs/朱有鹏/a/libiconv-1.14.tar.gz   /home/liu/qt/qt5.6/depend/libiconv

步骤2:

 ./configure -prefix=$PWD/_install -host=arm-linux-gnueabihf

解压

在源码下:make

make后的问题:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
解决:

在/home/liu/qt/qt5.6/depend/libiconv/libiconv-1.14/srclib/stdio.h  中

找到那一行,注释掉。

在源码下:再次make

没有错误

 

错误:编译好的库是intel80386架构的,不是ARM的,不能用,要交叉编译才行。
解决:

make distclean

先看配置好的Makefile,找交叉编译工具链的全局变量。但是本项目的Makefile中没有CC等这些定义,像这种一般就是通过环境变量来设置的。

先删除整个文件,重新解压一份

./configure -prefix=$PWD/_install --host=arm-none-linux-gnueabi
make CROSS_COMPILE=arm-linux-none-gnueabi- ARCH=arm

make install

结果:install 后的文件在  _install   下面

QT环境搭建(4):在开发板中运行QT应用实验_交叉编译

把库文件复制到根文件系统中:

# cp preloadable_libiconv.so /home/liu/ARM/rootfs/rootfs2/lib/ -r
 

vi /etc/profile中加上这几句

export LD_PRELOAD=/lib/preloadable_libiconv.so

最后:

可以在开发板上正常显示

 

交叉编译libiconv, 编译libiconv错误提示gets相关的,

注意一个QT项目的文件包括:

myapp/object1/# ls
build-test1-Qt5_6_2_arm-Debug  test1
myapp/object1/# cd build-test1-Qt5_6_2_arm-Debug
myapp/object1/build-test1-Qt5_6_2_arm-Debug# ls
main.o  mainwindow.o  Makefile  moc_mainwindow.cpp  moc_mainwindow.o  test1  ui_mainwindow.h

myapp/object1# cd ..
myapp/object1# cd test1/
=myapp/object1/test1# ls
main.cpp  mainwindow.cpp  mainwindow.h  mainwindow.ui  test1.pro  test1.pro.user

=myapp/object1/test1# gedit test1.pro

这个就是最后生成的可执行文件名

QT环境搭建(4):在开发板中运行QT应用实验_交叉编译_02