Qt 在arm下的移植

1 Tslib移植

1.1 源码下载

1.2 解压 tar -xvf tslib-1.4.tar.gz

1.3 配置

# cd tslib
# ./autogen.sh
# echo "ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache 
# mkdir /opt/tslib
# ./configure --prefix=/opt/tslib --host=arm-linux --cache-file=arm-linux.cache

1.4 编译和安装

# make
# make install

1.5 部署

(1)动态库文件so   /lib
(2)配置文件            /etc
(3)bin文件            /bin

1.6 导出环境变量

export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_CALIBFILE=/tslib1.4/etc/pointercal
export TSLIB_CONFFILE=/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tslib1.4/lib
export TS_INFO_FILE=/sys/class/input/input2/uevent

文件系统中/etc/profile文件是开机启动,可以添加到此文件中

1.7 运行和测试
      执行/tslib/bin下面的文件

1.8 问题及解决
1.8.1 
如果./autogen.sh时报错:./autogen.sh: 4: autoreconf: not found
    是因为系统中没有安装autoconf工具。
    解决方法:先让ubuntu能上网,然后执行:

sudo apt-get install autoconf automake libtool

1.8.2 错误1:No raw modules loaded.

         ts_config: No such file or directory
解决:在etc/ts.conf中打开module raw input这行的注释就行了。

1.8.3  selected device is not a touchscreen I understand
解决:在tslib代码中定位错误,input-raw.c文件中,check_fd函数判断有问题,输出了错误信息。是版本号的问题,交叉编译工具链和内核中的版本号不对应。

/linux/input.h
define  EV_VERSION  0x010000修改版本号:
内核中的路径为: kernel/include
把交叉编译工具链中的EV_VERSION也改为0x010000
路径为:/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/usr/include/linux/input.h

2 QT5.6.2配置和交叉编译

2.1 创建工作目录,并解压

2.2 创建安装目录:/opt/QT5.6.2/

2.3 配置相应的qmake

vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
#aston added
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE   += -O2  -march=armv7-a   
QMAKE_CXXFLAGS_RELEASE += -O2  -march=armv7-a
# 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_NM = arm-linux-nm -P
QMAKE_STRIP = arm-linuxi-strip

2.4 编译前配置(可以参考./configure --help的提示来配置)

./configure  -prefix /opt/QT5.6.2  \
  -opensource  \
  -confirm-license \
  -release  \
  -shared  \
  -accessibility \
-c++std c++98 \
  -xplatform linux-arm-gnueabi-g++ \
-qpa linuxfb \
-linuxfb \
-qreal float \
-pch \
-qt-zlib \
  -qt-libjpeg \
          -qt-libpng \
-no-sse2 \
          -no-largefile \
          -no-qml-debug \
          -no-glib \
-no-gtkstyle \
  -no-opengl \
  -nomake tools \
  -nomake examples \
  -tslib \
  -skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland \
  -I /howard/port_qt/tslib1.4/include \
  -L /howard/port_qt/tslib1.4/lib

2.5 make   make install

2.6 编译中的错误解决

2.6.1 找不到dlopen或者dlsym

    在编译器后面加ldl arm-linux-g++ -ldl

2.6.2 undefined reference to `__sync_add_and_fetch_4'

      参考http://www.mamicode.com/info-detail-1699895.html

#libtool --tag=CC --mode=compile arm-linux-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c

#libtool --tag=CC --mode=link arm-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo

 利用libtool生成liblinux-atomic.a,注意生成的目录名叫.libs所以是隐藏的

#cp .libs/liblinux-atomic.a /opt/linux-automic    // 注意/opt/linux-automic是自己事先创建的 在QT源码下修改:#vi qtscript/src/script/Makefile

在LIBS  = 的结尾添加 -L/opt/linux-atomic -llinux-atomic

linux下QT应用开发环境搭建

3.1 直接运行:#./qt-opensource-linux-x86-5.3.2.run

3.1 问题:

本地编译时出现:error: cannot find -lGL

解决办法:sudo apt-get install libgl1-mesa-dev

 4 开发板中运行QT应用 

4.1 QT库复制

复制本机qt下面的lib和plugins库到开发板

4.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

4.3 运行测试文件

4.4 问题

问题1:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

解决:C++库在交叉编译工具链中,复制进去即可。

进入安装编译工具的安装目录,#find -name “libstdc++.so.6”,对库进行复制,加 -d,对符号链接进行复制

问题2:QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed

QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed

解决:

2.1、解压libiconv-1.14.tar.gz  

2.2#./configure -prefix=$PWD/_install --host=arm-none-linux-gnueabi

2.3 make  

   make install

把_install/lib下的preloadable_libiconv.so 拷到系统的/lib下, 

export LD_PRELOAD=/lib/preloadable_libiconv.so

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值