近日将QtEmbedded库的版本由4.7.0更新到4.7.4.工具链并未改变,仍为

Target: arm-none-linux-gnueabi
Configured with: ......
Thread model: posix
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)

所有依赖的库根据需要重新下载最新版本编译。现将在此过程中出现的问题及解决方法列出,以供下次移植时参考。

1.browser程序重新编译,在开发板的命令行运行:
./browser -display "LinuxFB:/dev/fb1" -geometry 1920x1080 -qws
 www.baidu.com &

a.第1次错误
-----------------------------------------------------------------------------
./browser: error while loading shared libraries: libqtsingleapplication.so.1: cannot open shared object file: No such file or directory
-----------------------------------------------------------------------------

拷贝libqtsingleapplication.so.1库到/nand1/lib中消除了这个问题

b.第2次错误
-----------------------------------------------------------------------------
 QFontDatabase: Cannot find font directory /usr/local/arm/qte4.7.4/lib/fonts - is Qt installed correctly?
-----------------------------------------------------------------------------

在目录/nand1/allapp/browser下建立qt.conf文件,文件内容
-----------------------------------------------------------------------------
[Paths]
Prefix = /usr/qte-4.7.4
Translations = share/qtopia/translations
Plugins = lib/qtopia/plugins
Libraries = lib
#Headers = include/qtopia
-----------------------------------------------------------------------------

页在/usr/qte-4.7.4下只是建立到nand1相应目录的链接,
------------------------------------------------------------------------------
/usr/qte-4.7.4 # ls -l
lrwxrwxrwx    1 root     0              10 Jan  1  1970 etc -> /nand1/etc
lrwxrwxrwx    1 root     0              10 Jan  1  1970 lib -> /nand1/lib
lrwxrwxrwx    1 root     0              14 Jan  1  1970 libexec -> /nand1/libexec
lrwxrwxrwx    1 root     0              11 Jan  1  1970 sbin -> /nand1/sbin
lrwxrwxrwx    1 root     0              12 Jan  1  1970 share -> /nand1/share
lrwxrwxrwx    1 root     0              10 Jan  1  1970 ssl -> /nand1/ssl
lrwxrwxrwx    1 root     0              19 Jan  1  1970 translations -> /nand1/translations
lrwxrwxrwx    1 root     0              10 Jan  1  1970 var -> /nand1/var
------------------------------------------------------------------------------

c.第3次错误
------------------------------------------------------------------------------
/nand1/allapp/browser # LinuxFB: driver not found
------------------------------------------------------------------------------
在编译QtEmbedded时的配置参数是:

./configure -opensource -confirm-license -release \
-prefix /usr/local/arm/qte4.7.4 \
-webkit -qt-zlib \
-xplatform qws/linux-arm-gnueabi-g++ -embedded armv6 \
-qt-kbd-linuxinput -qt-mouse-linuxinput -plugin-gfx-linuxfb \
-nomake demos -nomake examples -nomake tools -nomake test -fast \
-L /usr/local/arm/lib -I /usr/local/arm/include

增加上-qt-gfx-linuxfb,去除-plugin-gfx-linuxfb

=================================================================================
./configure -opensource -confirm-license -release \
-prefix /usr/local/arm/qte4.7.4 \
-webkit -qt-zlib \
-xplatform qws/linux-arm-gnueabi-g++ -embedded armv6 \
-qt-kbd-linuxinput -qt-mouse-linuxinput -qt-gfx-linuxfb \
-nomake demos -nomake examples -nomake tools -nomake test -fast \
-L /usr/local/arm/lib -I /usr/local/arm/include
=================================================================================

对与LinuxFb相关的配置项

----------------------------------------------------------------------------------
-qt-gfx-<driver> … Enable a graphics <driver> in the QtGui library.
Possible values for <driver>: [ linuxfb transformed qvfb vnc multiscreen ]

-plugin-gfx-<driver> Enable graphics <driver> as a plugin to be
linked to at run time.
Possible values for <driver>: [  ahi directfb hybrid linuxfb powervr qvfb transformed vnc ]

-no-gfx-<driver> … Disable graphics <driver> entirely.
Possible values for <driver>: [ linuxfb transformed qvfb vnc multiscreen ]

-----------------------------------------------------------------------------------

再次编译QtEmbedded时的信息:

-----------------------------------------------------------------------------------

Building on:   qws/linux-x86-g++
Building for:  qws/linux-arm-gnueabi-g++
Architecture:  armv6
Host architecture: i386

Build .................. libs docs translations
Configuration ..........  cross_compile release shared dll embedded largefile stl precompile_header exceptions_off  minimal-config small-config medium-config large-config full-config qt3support accessibility embedded reduce_exports ipv6 clock-gettime clock-monotonic mremap getaddrinfo ipv6ifname getifaddrs inotify png freetype zlib nis multimedia audio-backend svg script scripttools declarative release
Debug .................. no
Qt 3 compatibility ..... yes
QtDBus module .......... no
QtConcurrent code ...... yes
QtGui module ........... yes
QtScript module ........ yes
QtScriptTools module ... yes
QtXmlPatterns module ... no
Phonon module .......... no
Multimedia module ...... auto
SVG module ............. yes
WebKit module .......... yes
JavaScriptCore JIT ..... To be decided by JavaScriptCore
Declarative module ..... yes
Declarative debugging ...yes
Support for S60 ........ no
Symbian DEF files ...... no
STL support ............ yes
PCH support ............ yes
MMX/3DNOW/SSE/SSE2/SSE3. no/no/no/no/no
SSSE3/SSE4.1/SSE4.2..... no/no/no
AVX..................... no
iWMMXt support ......... no
NEON support ........... no
IPv6 support ........... yes
IPv6 ifname support .... yes
getaddrinfo support .... yes
getifaddrs support ..... yes
Accessibility .......... yes
NIS support ............ yes
CUPS support ........... no
Iconv support .......... no
Glib support ........... no
GStreamer support ...... no
PulseAudio support ..... no
Large File support ..... yes
GIF support ............ plugin
TIFF support ........... plugin (qt)
JPEG support ........... plugin (qt)
PNG support ............ yes (qt)
MNG support ............ plugin (qt)
zlib support ........... yes
Session management ..... no
Embedded support ....... armv6
Freetype2 support ...... auto (yes)
Graphics (qt) .......... linuxfb multiscreen linuxfb
Graphics (plugin) ......
Decorations (qt) ....... styled windows default
Decorations (plugin) ...
Keyboard driver (qt) ... tty linuxinput
Keyboard driver (plugin) ..
Mouse driver (qt) ...... pc linuxtp linuxinput
Mouse driver (plugin) ..
OpenGL support ......... no
OpenVG support ......... no
SQLite support ......... plugin (qt)
OpenSSL support ........ no
Alsa support ........... no
ICD support ............ no

-----------------------------------------------------------------------------------

d.第4次错误
再次运行,这次不再报inuxFB: driver not found.上次的问题得到解决
但由于缺必需的libweboxj.so,需要编译weboxjlib工程,生成so文件

$qmake weboxjlib.pro -r -spec /usr/local/arm/qte4.7.4/mkspecs/qws/linux-arm-gnueabi-g++
$make
出现下面错误:
---------------------------------------------------------------------------------
bookmarksdrv.h:8:27: error: libxml/parser.h: No such file or directory
bookmarksdrv.h:9:26: error: libxml/xpath.h: No such file or directory
In file included from weboxjlib.cpp:14:
----------------------------------------------------------------------------------

从信息中可看出,需要交叉编译libxml2库
我编译的版本是libxml2-2.7.8.tar.gz,交叉编译支持很好,只要在configure时设置正确的--host就搞定了
交叉编译安装后,问题解决,当然要修改weboxjlib.pro文件中的INCLUDEPATH路径,添加安装的libxml2的头文件路径

e.第5次错误
---------------------------------------------------------------------------------
mycurl.cpp:4:24: error: curl/multi.h: No such file or directory
mycurl.cpp: In member function 'void DownloadThread::init_easy_curl(CURLM*, my_curl_quest*)':
mycurl.cpp:33: error: 'CURL' was not declared in this scope
---------------------------------------------------------------------------------
这次是Curl库未交叉编译过,
下载curl-7.22.0.tar.bz2源码包进行交叉编译并安装

f.第6次错误
---------------------------------------------------------------------------------
des3drv.cpp:3:25: error: openssl/des.h: No such file or directory
des3drv.cpp: In member function 'void Des3Drv::Des3Encrypt(const QString&, const QString&, QString&)':
des3drv.cpp:103: error: 'DES_key_schedule' was not declared in this scope
---------------------------------------------------------------------------------
是openssl库未交叉编译
下载openssl-1.0.0e.tar.gz源码包
openssl对交叉编译支持不好,需要confiugre后修改Makefile文件

---------------------------------------------------------------------------------
CC= arm-none-linux-gnueabi-gcc
CFLAG= -DOPENSSL_THREADS  -Wa,--noexecstack
DEPFLAG= -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE
PEX_LIBS=
EX_LIBS=
EXE_EXT=
ARFLAGS=
AR= arm-none-linux-gnueabi-ar $(ARFLAGS) r
RANLIB= arm-none-linux-gnueabi-ranlib
NM= arm-none-linux-gnueabi-nm
PERL= /usr/bin/perl
TAR= tar
TARFLAGS= --no-recursion
MAKEDEPPROG=makedepend
LIBDIR=lib

---------------------------------------------------------------------------------
上面红色的部分是修改过的,应根据交叉编译器来设置。后面的make、make install没有什么问题.

g.第7次错误
----------------------------------------------------------------------------------
/usr/local/arm/arm-2008q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lbcti_telechips
collect2: ld returned 1 exit status
make: *** [libweboxjlib.so.1.0.0] 错误
----------------------------------------------------------------------------------
这个库是百视通提供的第三方库,将其拷贝到当前目录下就可以了

h.第8次错误
现在browser程序终于可以运行了,但是在加载libweboxj库时会抛出错误,主要是libweboxj库本身依赖的库在板子上不存在.
使用strace工具会有以下信息:
----------------------------------------------------------------------------------
open("/usr/lib/fast-mult/half/libxml2.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/fast-mult/half", 0xbec470f0) = -1 ENOENT (No such file or directory)
open("/usr/lib/fast-mult/libxml2.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/fast-mult", 0xbec470f0) = -1 ENOENT (No such file or directory)
open("/usr/lib/half/libxml2.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/half", 0xbec470f0)     = -1 ENOENT (No such file or directory)
open("/usr/lib/libxml2.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0
munmap(0x45880000, 501536)              = 0
munmap(0x458fb000, 286544)              = 0
munmap(0x45941000, 349680)              = 0
stat64("/nand1/allapp/webox/libweboxjlib.so", {st_mode=S_IFREG|0755, st_size=471392, ...}) = 0
write(2, "terminate called after throwing "..., 48terminate called after throwing an instance of ') = 48
write(2, "JsHostMng::ExceptId", 19JsHostMng::ExceptId)     = 19
write(2, "'\n", 2'
)                      = 2
----------------------------------------------------------------------------------
从以上信息看出是libxml2库找不到,交叉编译libxml2库后下载到板子上即可。

i.第9个错误
现在程序可以运行起来了,但是发现在浏览网页时gif图片显示不出来
看来是qt的插件imageformats未编译安装到开发板
进入qte4.7.4的源码目录./qte-4.7.4/src/plugins/imageformats中,运行下面命令
qmake
make clean
make
make install
将安装目录./plugins/imageformats中的库文件拷贝到开发板中,并在qt.conf中设置正确的插件路径,我的qt.conf设置如下:
-----------------------------------------------------------------------------------
[Paths]
Prefix = /usr/qte-4.7.4
Translations = share/qtopia/translations
Plugins = lib/qtopia/plugins
Libraries = lib
#Headers = include/qtopia
------------------------------------------------------------------------------------

现在,程序应该可以正常地运行了。

总结整个的问题解决过程,qt的编译的配置比较关键,一定要配置成你希望的display模式,在我的开发板上配置的是LinuxFB,具体的配置项是-qt-gfx-linuxfb。如果要支持网页游览,一定要加上-webkit选项,imageformats插件的编译可以在后面单独进行。

其它的主要是一些依赖的库了,这和具体的应用相关。

http://blog.sina.com.cn/s/blog_8738908f0100ugsr.html

更换Qt QtEmbedded库的版本出现问题及解决(交叉编译OpenSSL)的更多相关文章

  1. linux(debian) arm-linux-g++ v4.5.1交叉编译 embedded arm 版本的QtWebkit (browser) 使用qt 4.8.6 版本

    最近需要做一个项目 在arm 架构的linux下 没有桌面环境的情况下拉起 有界面的浏览器使用. 考虑用qt 的界面和 qtwebikt 的库去实现这一系列操作. 本文参考: Qt移植到ARM Lin ...

  2. QT共享库的创建与调用(初级)(附:UI界面不能被改变的其中一个原因)

    背景: 最近在做的一个项目其中一部分既是实现PC与下位机的USB通信.windows平台下已经完成,现需移植到linux平台下. 在linux系统中,通过一段时间的工作,设备已被配置成hid类(后续再 ...

  3. linux(debian) arm-linux-g++ v4.5.1交叉编译 embedded arm 版本的QtWebkit (browser) 使用qt 4.8.6 版本 以及x64上编译qt

    最近需要做一个项目 在arm 架构的linux下 没有桌面环境的情况下拉起 有界面的浏览器使用. 考虑用qt 的界面和 qtwebikt 的库去实现这一系列操作. 本文参考: Qt移植到ARM Lin ...

  4. ZeroMQ接口函数之 :zmq_version – 返回ZMQ链接库的版本

    ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_version zmq_version(3)          ØMQ Manual - ØMQ/4.1.0 Na ...

  5. pip安装第三方库以及版本

    这篇blog只是写给自己看看的. 今天突然遇到sqlalchemy映射到数据库时,一个字段类型是datetime(6),我这边死活访问不上,之前一直没有问题,最后查明原因,原来是第三方库的版本问题,真 ...

  6. paip.c++ qt 共享库dll的建立

    paip.c++ qt 共享库dll的建立 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/at ...

  7. 浅析GDAL库C#版本支持中文路径问题(续)

    上篇博客中主要说了GDAL库C#版本中存在的问题,其表现形式主要是:"文件名中的汉字个数是偶数,完全没有影响,读取和创建都正常,如果文件名中的汉字个数是奇数,读取和创建都会报错." ...

  8. eclipse项目更换svn共享库

    eclipse项目更换svn共享库 参考内容: http://blog.csdn.net/yang5726685/article/details/59111586 已经共享过的svn项目,更换资源库时 ...

  9. 玩转ArduinoJson库 V6版本

    1.前言     前面,博主已经讲解了ArduinoJson库的V5版本.为了节省时间以及不讨论重复内容,博主建议读者先去阅读一下 玩转ArduinoJson库 V5版本 .重点了解几个东西: JSO ...

随机推荐

  1. DownLoadManager[20530:228829] DiskImageCache: Could not resolve the absolute path of the old directory.

    uiwebview 模拟器打开PDF文件时崩溃.报下面错误,还不知道为什么 DownLoadManager[20530:228829] DiskImageCache: Could not resolv ...

  2. UIPasteboard粘贴板:UIlabel开启复制粘贴功能(一)

    首先,因为苹果只放出来了 UITextView,UITextField,webView三个控件的剪贴板,所以一般控件的剪贴板都被禁用了,因此,我们首先要做的就是把这属性放出来,其实就是实现三个简单的方 ...

  3. HDU 5293 Train chain Problem - 树链剖分(树状数组) + 线段树+ 树型dp

    传送门 题目大意: 一颗n个点的树,给出m条链,第i条链的权值是\(w_i\),可以选择若干条不相交的链,求最大权值和. 题目分析: 树型dp: dp[u][0]表示不经过u节点,其子树的最优值,dp ...

  4. Docker + .NET Core(三)-两种发布方式

    原文:Docker + .NET Core(三)-两种发布方式 第一种,自己手写dockerfile发布,上传至hubDocker 正常发布到文件夹中,发布文件上传至linux机器上.如 /www/a ...

  5. Python 格式化输出 —— 小数转化为百分数

    比如将 0.1234 转化为 12.34% 的形式: rate = .1234 print('%.2f%%' % (rate * 100)) 第一个百分号和 .2f 相连,表示浮点数类型保留小数点后两 ...

  6. vmware合并多个虚拟硬盘文件(使用vmware-vdiskmanager.exe)

    有时,当我们创建虚拟机vmware里面的应用程序,我们可能会选择创建分割的虚拟磁盘中的多个文件2GB的文件,这是为了提高复制过程,主要用于存储虚拟机文件系统不支持创建更大的文件.还有种情况是虚拟化物理 ...

  7. TCP/UDP 报头格式

    参考:https://www.cnblogs.com/MRRAOBX/articles/4540228.html TCP: 源端口号  以及 目的端口号  32位 序列号  seq 确认号  ACK ...

  8. 如何停止处于stopping状态的windows服务(使用taskkill)

    工作中有时需要启动和停止windows service,有时候会出现服务处于stopping或者starting的状态,但是,在services界面中,start service/stop servi ...

  9. Mac版Visual Studio预览版

    来了,Mac版Visual Studio预览版开放下载 投递人 itwriter 发布于 2016-11-17 12:11 评论(7) 有1317人阅读 原文链接 [收藏] « » 微软前俩天宣布,推 ...

  10. Analysis of variance(ANOVA)

    方差分析,也称为"变异数分析",用于两个及两个以上样本均值(group means)差别的显著性检验.在 ANOVA 的环境下,一个观测得到的方差视为是由不同方差的源组合而成.