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 下面
把库文件复制到根文件系统中:
# 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
这个就是最后生成的可执行文件名