飞凌嵌入式S5PV210开发板Qtopia2.2.0环境搭建(三)——编译第三方库
S5PV210开发板(Cortex-A8)4.1 编译
编译qtopia-free-forlinx-2.2.0 前确认已经把您刚 才制作的/root/yizhi/ARMinclude 下的文件放到交叉编译器目录 “arm-none-linux-gnueabilibcusrinclude” 里面,所有的库文件放到交叉编译器安装目录的“arm-none-linux-gnueabilibcusrlib” 文件夹下面
另外需要注意的是用官方提供的 Qtopia2.2.0 源代码编译出来的版本,主界面的图标下会出现一条虚线,影响美观, 将ARM-qtopia-free-src-2.2.0.tar.gz解压到 /root/yizhi 文 件 夹 后(yizhi 是自己建立的文件夹),
打开qtopia-free-2.2.0/qtopia/src/qt/qconfig-qpe.h 文件,在里面增加以下内容即可解决虚线的问题:
#define QT_NO_QWS_GFX_SPEED
修改脚本脚本里面有编译时需要的环境变量:
#gedit build
注意:编译过程中产生的状态信息将记录到当前目录下的 qtopia2.2.0Makelog 文件里面,
如果编译过程中产生了大量的错误信息,打开该文件,查找 error 关键字进行问题的定位,里面记录的信息对您很有帮助,有时焦点不会停留在出现错误的位置,这时查看日志文件就很重要了。
4.2 常见bug
4.2.1 open函数缺少必要的参数
错误信息:
In function ‘int open(const char*, int, ...)’,
inlined from ‘QMemoryFileData* QMemoryFile::openData(const QString&, int, uint)’ at tools/qmemoryfile_unix.cpp:143:54:
/usr/include/i386-linux-gnu/bits/fcntl2.h:51:26: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
修改:
文件路径:(此错误有两处)
./root/yizhi/qtopia-free-2.2.0/qt2/src/tools/qmemoryfile_unix.cpp
./root/yizhi/qtopia-free-2.2.0/qtopia/src/libraries/qtopia/qmemoryfile_unix.cpp
找到:(大概在141行)
修改为:
4.2.2缺少头文件错误
错误信息:
../include/qmap.h:107:13: error: ‘ptrdiff_t’ does not name a type
../include/qmap.h:223:13: error: ‘ptrdiff_t’ does not name a type
../include/qvaluelist.h:88:13: error: ‘ptrdiff_t’ does not name a type
../include/qvaluelist.h:164:13: error: ‘ptrdiff_t’ does not name a type
make[2]: *** [.obj/release-shared-mt/qapplication_x11.o] Error 1
修改方法:
搜索到qmap.h和qvaluelist.h文件后加上:
#include
搜索文件命令: find –name “qmap.h”
4.2.3 使用未定义的类
错误信息:
/root/yizhi/qtopia-free-2.2.0/qt2/include/qwindowsystem_qws.h:230: error: 'QWSInputMethod' has not been declared
/root/yizhi/qtopia-free-2.2.0/qt2/include/qwindowsystem_qws.h:237: error: 'QWSGestureMethod' has not been declared
make[1]: *** [allmoc.o] Error 1
修改:
#cd /root/yizhi/qtopia-free-2.2.0/qt2/src/kernel
#gedit qwindowsystem_qws.h
在前面增加以下两行
class QWSInputMethod;
class QWSGestureMethod;
保存退出,继续编译
4.2.4缺少uuid库
Creating pngscale...make[1]: Entering directory `/root/yizhi/qtopia-free-2.2.0/qtopia/util/pngscal'
.................................................................make[1]: *** [../../bin/pngscale] Error 1
make[1]: Leaving directory `/root/yizhi/qtopia-free-2.2.0/qtopia/util/pngscal'
Failed to make pngscale
修改方法:
apt-get install uuid-dev
4.2.5缺少系统头文件
错误信息:
kernel/qpixmapcache.cpp:125: fatal error: asm/page.h: No such file or directory
compilation terminated.
make[1]: *** [tmp/release-shared-linux-arm-g++-no-keypad/kernel/qpixmapcache.o] Error 1
make[1]: Leaving directory `/root/yizhi/qtopia-free-2.2.0/qt2/src'
修改:
路径(两个地方):
/root/yizhi/qtopia-free-2.2.0/qt2/src/kernel/qpixmapcache.cpp
./root/yizhi/qtopia-free-2.2.0/dqt/src/kernel/qpixmapcache.cpp
第125行
修改为:
#define PAGE_SHIFT12
#define PAGE_SIZE(1UL << PAGE_SHIFT)
#define PAGE_MASK(~(PAGE_SIZE-1))
//#include//PAGE_SIZE,PAGE_MASK,PAGE_ALIGN
这样修改是因为新的 Linux 内核源代码中已经不包含该头文件了。
4.2.6 this指针
错误信息:
root/yizhi/qtopia-free-2.2.0/qt2/include/qvaluestack.h:57:6: error: cannot convert ‘QValueList
::Iterator {aka QValueListIterator
}
/root/yizhi/qtopia-free-2.2.0/qt2/include/qvaluestack.h: In member function ‘T QValueStack::pop() [with T = QString]’:
xml/qxml.cpp:2532:57: instantiated from here
/root/yizhi/qtopia-free-2.2.0/qt2/include/qvaluestack.h:57:6: error: cannot convert ‘QValueList::Iterator {aka QValueListIterator}’ to ‘const char*’ for argument ‘1’ to ‘int remove(const char*)’
make[1]: *** [tmp/release-shared-linux-g++/xml/qxml.o] Error 1
修改:
路径:
./root/yizhi/qtopia-free-2.2.0/qt2/src/tools/qvaluestack.h(57行)
将 remove( this->fromLast() );改为 this->remove( this->fromLast() );
保存退出
4.2.7 缺少文件
错误信息:
../../../include/qtopia/custom-qtopia.h:1: fatal error: ../../src/libraries/qtopia/custom-linux-arm-g++.h: No such file or directory
compilation terminated.
make[5]: *** [.obj/release-shared/qpeapplication.o] Error 1
修改:
路径:
/yizhi/qtopia-free-2.2.0/qtopia/src/libraries/qtopia
进入该路径后执行以下命令:
Cp custom-linux-ipaq-g++.cpp custom-linux-arm-g++.cpp
cp custom-linux-ipaq-g++.h custom-linux-arm-g++.h
4.2.8一类出现较多的错误
4.2.8.1
错误信息:
qdawg.cpp:294: error: extra qualification 'QDawgPrivate::' on member 'QDawgPrivate'
修改:
路径:
./root/yizhi/qtopia-free-2.2.0/qtopia/src/libraries/qtopia/qdawg.cpp(294行)
去掉'QDawgPrivate::'
4.2.8.2
错误信息:
thumbnailview_p.h:81: error: extra qualification 'ThumbnailItem::' on member 'paintItem'
修改:
路径:
/root/yizhi/qtopia-free-2.2.0/qtopia/src/libraries/qtopia2/thumbnailview_p.h(81行)
去掉'ThumbnailItem::'
4.2.8.3
错误信息:
abtable_p.h:276: error: extra qualification 'PhoneTypeSelector::' on member 'addType'
修改:
路径:
/root/yizhi/qtopia-free-2.2.0/qtopia/src/libraries/qtopiapim/abtable_p.h(276行)
去掉'PhoneTypeSelector::'
4.2.8.4
错误信息:
numberentry_p.h:106: error: extra qualification 'NumberEntryDialog::' on member 'eventFilter'
修改:
路径
/root/yizhi/qtopia-free-2.2.0/qtopia/src/libraries/qtopiapim/numberentry_p.h(106行)
去掉'NumberEntryDialog::'
4.2.8.5
错误信息:
videoviewer.cpp:52: error: extra qualification 'SimpleVideoWidget::' on member 'SimpleVideoWidget'
修改:
./root/yizhi/qtopia-free-2.2.0/qtopia/src/libraries/mediaplayer/videoviewer.cpp (52行)
去掉'SimpleVideoWidget::'
4.2.8.6
错误信息:
ablabel.h:78: error: extra qualification 'AbLabel::' on member 'decodeHref'
修改:
路径:
/root/yizhi/qtopia-free-2.2.0/qtopia/src/applications/addres***ook/ablabel.h(78行)
去掉'AbLabel::'
4.2.8.7
错误信息:
minefield.h:105: error: extra qualification 'MineField::' on member 'setState'
minefield.h:106: error: extra qualification
'MineField::' on member 'placeMines
修改:
路径:
./root/yizhi/qtopia-free-2.2.0/qtopia/src/games/minesweep/minefield.h(105 106行)
去掉'MineField::'
4.2.8.8
buttoneditordialog.h:56: error: extra qualification 'ButtonEditorDialog::' on member 'actionFor'
修改:
路径:
./root/yizhi/qtopia-free-2.2.0/qtopia/src/settings/buttoneditor/buttoneditordialog.h(56行)
去掉'ButtonEditorDialog::'
4.2.8.9
packagewizard.h:106: error: extra qualification 'PackageWizard::' on member 'current'
修改:
./root/yizhi/qtopia-free-2.2.0/qtopia/src/settings/qipkg/packagewizard.h(106行)
去掉'PackageWizard::'
4.2.8.10
keyboard.h:60: error: extra qualification 'KeyboardPicks::' on member 'KeyboardPicks'
修改:
路径:
./root/yizhi/qtopia-free-2.2.0/qtopia/src/plugins/inputmethods/keyboard/keyboard.h(60行)
去掉~ KeyboardPicks前面的'KeyboardPicks::'
4.2.8.11
polished.h:58: error: extra qualification 'PolishedDecoration::' on member 'drawBlend'
修改:
路径:
./root/yizhi/qtopia-free-2.2.0/qtopia/src/plugins/decorations/polished/polished.h(58行)
去掉'PolishedDecoration::'
4.2.8.12
inputmethods.cpp:86: error: extra qualification 'IMToolButton::' on member 'IMToolButton'
修改:
路径:
./root/yizhi/qtopia-free-2.2.0/qtopia/src/server/inputmethods.cpp(86行)
去掉'IMToolButton::'
4.2.9类型转换错误
4.2.9.1
backend/vobject.cpp:419: error: invalid conversion from 'const char*' to 'char*'
修改:
./root/yizhi/qtopia-free-2.2.0/qtopia/src/libraries/qtopia/backend/vobject.cpp(419行)
改为:char *dot = (char *)strrchr(g,'.');
4.2.9.2
wavplugin.cpp:435: error: invalid conversion from 'const char*' to 'char*'
修改:
/root/yizhi/qtopia-free-2.2.0/qtopia/src/plugins/codecs/wavplugin/wavplugin.cpp(435行)
改为:char *ext = (char *)strrchr( path.latin1(), '.' );
4.2.10库文件位置
/root/yizhi/qtopia-free-2.2.0/qtopia/lib/libqte.so: undefined reference to `ts_read_raw'
/root/yizhi/qtopia-free-2.2.0/qtopia/lib/libqte.so: undefined reference to `ts_open'
/root/yizhi/qtopia-free-2.2.0/qtopia/lib/libqte.so: undefined reference to `ts_fd'
/root/yizhi/qtopia-free-2.2.0/qtopia/lib/libqte.so: undefined reference to `ts_config'
/root/yizhi/qtopia-free-2.2.0/qtopia/lib/libqte.so: undefined reference to `ts_close'
/root/yizhi/qtopia-free-2.2.0/qtopia/lib/libqte.so: undefined reference to `ts_read'
修改:
把/usr/local/tslib下的相关库
libts-0.0.so.*类
拷到/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib下面
以上是在飞凌嵌入式S5PV210 OK210开发板上的操作。