在开发板中运行QT应用实验

1.rootfs中部署QT库

(1)QT库复制 在开发板的rootfs创建qt5.6.2
cp /opt/qt5.6.2/lib/ ./ -rf
cp /opt/qt5.6.2/plugins ./ -rf
(2)导出环境变量 vi /etc/profile添加

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/event1          
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1024x600:mmSize=1024x600:offset=0x0:tty=/dev/tty1

2、开发板中运行QT应用

(1)拷贝和执行 将qt生成的文件复制到linux开发板的rootfs下 执行
(2)问题解决和现象观察
问题1:找不到libQtxx rootfs中部署QT库中的内容
解决:部署QT库等文件并导出环境变量

问题2:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
解决:C++库在交叉编译工具链中,复制进去即可。
find -name “libstdc++*” 到/usr/local/arm/arm-2009q3去查找这个库的位置
./arm-none-linux-gnueabi/libc/thumb2/usr/lib/libstdc++.so.6
我们到/arm-none-linux-gnueabi/libc/thumb2/usr/lib/这个目录去复制

问题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目录下即可。
下载:libiconv.1.4下载

正确的配置:

./configure -prefix=$PWD/_install --host=arm-none-linux-gnueabi
make CROSS_COMPILE=arm-linux-none-gnueabi- ARCH=arm
make install
把_install/lib 下的preloadable_libiconv.so 拷到系统的/lib 下, 
导出环境变量:export LD_PRELOAD=/lib/preloadable_libiconv.so

测试:到/opt/QT5.6.2_Untu_SDK/Tools/QtCreator/bin执行qtcreator
编译后到/home/aston/qt_test/build-test-arm-Debug的test就是可执行文件
复制到开发板的rootfs文件下,执行即可

问题很多的配置(解决的错误思路):

./configure -prefix=$PWD/_install -host=arm-linux-gnueabihf
make
make install
把_install/lib 下的preloadable_libiconv.so 拷到系统的/lib 下,
export LD_PRELOAD=/lib/preloadable_libiconv.so

移植libiconv中遇到的问题及解决:
1、./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”);
解决:
find -name “stdio.h”找到那一行,注释掉。

2、编译好的库是intel80386架构的,不是ARM的,不能用,要交叉编译才行。
解决:先看配置好的Makefile,找交叉编译工具链的全局变量。但是本项目的Makefile中没有CC等这些定义,像这种一般就是通过环境变量来设置的。

交叉编译libiconv,参考:http://blog.csdn.net/wuyu92877/article/details/52472810
编译libiconv错误提示gets相关的,参考:http://blog.csdn.net/ownfire/article/details/47276219

发现重新更改配置就可以了,就得到了正确的解决办法

猜你喜欢

转载自blog.csdn.net/m0_37182543/article/details/80290043