分享:qtopia2.2.0编译中的问题debug

首先不得不说,搭建qtioia2.2.0环境的最简单方法可能是友善的qt手册上的了,一个命令运行补丁就行了。。。。。详细的步骤请参考友善的手册

如果你硬是要自己搭建,那也可以啊。。一下是一些bug信息,慢慢改了。。。的有耐心哦!!!

开发环境

ubuntu9.10

arm-linux-gcc4.4.1

错误一:

/usr/bin/ld: cannot find -lXmu

collect2: ld returned 1 exit status

错误二:

Creating pngscale...make[1]: Entering directory `/root/yizhi/qtopia-free-2.2.0/qtopia/util/pngscale'

..make[1]: *** [../../bin/pngscale] Error 1

make[1]: Leaving directory `/root/yizhi/qtopia-free-2.2.0/qtopia/util/pngscale'

Failed to make pngscale

分析:

这是因为没有安装uuid和Xmu,因为在编译qtopia2.2.0的过程中需要安装工具uuid(Universally Unique Identifier,)和 xmu库文件。

解决办法:

apt-get install uuid-dev

apt-get install libxmu-dev libxmu6

错误三:

external/clearsilver/cgi/cgi.c:22: fatal error: zlib.h: No such file or directory

compilation terminated.

make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libneo_cgi_intermediates/cgi.o] Error 1

解决:

在ubuntu里,zlib叫zlib1g,相应的zlib-devel叫zlib1g.dev

sudo apt-get install zlib1g-dev

错误四:

/usr/bin/ld: cannot find -lz

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1

解决方法:

sudo apt-get install lib32z1-dev

错误五:

bison -d -o out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp frameworks/base/tools/aidl/aidl_language_y.y

/bin/bash: bison: command not found

make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Error 127

解决方法:

sudo apt-get install bison

错误六:

Lex: aidl <= frameworks/base/tools/aidl/aidl_language_l.l

/bin/bash: flex: command not found

make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp] Error 127

解决方法:

sudo apt-get install flex

错误七:

/usr/bin/ld: cannot find -lncurses

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb] Error 1

解决方法:

sudo apt-get install lib32ncurses5-dev

错误八:

prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55: fatal error: X11/Xlib.h: No such file or directory

compilation terminated.

make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/main-common.o] Error 1

解决方法:

sudo apt-get install libx11-dev

错误九:

sh: gperf: not found

calling gperf failed: 32512 at ./makeprop.pl line 96.

make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h] Error 25

make: *** Deleting file `out/target/product/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates/WebCore/css/CSSPropertyNames.h'

解决方法:

sudo apt-get install gperf

错误十:open函数参数不够

/usr/include/bits/fcntl2.h:51: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments

解决办法:

参见ok6410移植百科全书。

错误十一:使用未定义的类

error: ‘QWSInputMethod’ has not been declared

解决办法:

参见ok6410移植百科全书。 (注: 该文件中使用了这两个类,C++允许在文件中这样声明其他地方定义的类,减少头文件的相互包含关系,加快编译速度)

错误十二:缺少头文件

asm/page.h: No such file or directory

解决办法:

参见ok6410移植百科全书。

错误十三:类型转换错误

home/work/armqt/qtlibsource/qt-x11/include/qvalue stack.h: In member function 'T QValueStack<T>::pop() [with T = QMap<QString, QString>]':

xml/qxml.cpp:513: instantiated from here

  /home/work/armqt/qtlibsource/qt-x11/include/qvalue stack.h:57: 错误:不能从'QValueListIterator<QMap<QString, QString> >'转换到'const char*',为实参'1'(属于'int remove(const char*)')

/home/work/armqt/qtlibsource/qt-x11/include/qvalue stack.h: In member function 'T QValueStack<T>::pop() [with T = QString]':

xml/qxml.cpp:2502: instantiated from here

  /home/work/armqt/qtlibsource/qt-x11/include/qvalue stack.h:57: 错误:不能从'QValueListIterator<QString>'转换到'const char*',为实参'1'(属于'int remove(const char*)')

解决办法:

参见ok6410移植百科全书。

错误十四:没有找到uic工具 错误提示:

make[5]: /root/yizhi/host/qtopia-free-2.2.0/qt2/bin/uic: Command not found

make[5]: *** [../../../include/qtopia/private/passwordbase_p.h] Error 127

解决办法:

cd到你的qtopia-free-2.2.0目录下, find ./ -name uic 会看到其他的目录下已经有了uic,我把qt3/bin 目录下的uic拷贝到 qt2/bin下面,即可

(注:我在实际操作过程中,一开始报出这个错误,但是将其他的错误改完之后,这个错误也就自动消失了,我是菜鸟,不知道怎么回事, )

错误十五: 指针类型转换出错:

backend/vobject.cpp: In function ‘VObject* addGroup(VObject*, const char*)’:

backend/vobject.cpp:419: error: invalid conversion from ‘const char*’ to ‘char*’

backend/vobject.cpp: In function ‘void writeEncString(OFi

解决办法:

修改 qtopia-free-2.2.0/qtopia/src/libraries/qtopia/backend/vobject.cpp 文件419行

char *dot = strrchr(g,'.'); 修改为 char *dot = (char *)strrchr(g,'.');

在编译过程中还出现了类似的错误

wavplugin.cpp:435 : error: invalid conversion from 'const char*' to 'char*'

解决办法

修改qtopia-free-2.2.0/qtopia/src/plugins/codes/wavplugin/wavplugin.cpp文件的第435行

修改方法如上

错误十六:编译器找不到QSizePolicy类的五个参数的构造函数

ui/release-shared/passwordbase_p.cpp:35: error: no matching function for call to ‘QSizePolicy:SizePolicy(QSizePolicy::SizeType, QSizePolicy::SizeType, int, int, bool)’

/root/yizhi/host/qtopia-free-2.2.0/qt2/include/qsizepolicy.h:93: note: candidates are: QSizePolicy:SizePolicy(int)

/root/yizhi/host/qtopia-free-2.2.0/qt2/include/qsizepolicy.h:99: note: QSizePolicy:SizePolicy(QSizePolicy::SizeType, QSizePolicy::SizeType, bool)

/root/yizhi/host/qtopia-free-2.2.0/qt2/include/qsizepolicy.h:63: note: QSizePolicy:SizePolicy()

/root/yizhi/host/qtopia-free-2.2.0/qt2/include/qsizepolicy.h:46: note: QSizePolicy:SizePolicy(const QSizePolicy & )

解决办法:

qtopia-free-2.2.0/qtopia/src/libraries/qtopia/.ui/release-shared/passwordbase_p.cpp 文件中的38行位置

prompt = new QLabel( this, "prompt" );

prompt->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)1, 0, 0, prompt->sizePolicy().hasHeightForWidth() ) );

修改为:

prompt = new QLabel( this, "prompt" );

prompt->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)1, prompt->sizePolicy ().hasHeightForWidth() ) );

即去掉0,0 两个参数

错误十七(这是一大类错误,在编译过程中会遇到很多):g++编译器提示 有多余的符号在成员函数前 ,有些编译器规定C++成员函数前不需要再加这个类的名字

thumbnailview_p.h: At global scope:

thumbnailview_p.h:81: error: extra qualification ‘ThumbnailItem::’ on member ‘paintItem’

make[5]: *** [.obj/release-shared/imageselector.o] Eopia/src

解决办法 :

qtopia-free-2.2.0/qtopia/src/libraries/qtopia2/thumbnailview_p.h文件中第81行:

修改 void ThumbnailItem::paintItem( QPainter*, const QColorGroup& );

修改后 void paintItem( QPainter*, const QColorGroup& );

** 继续编译后会出现类似的错误

abtable_p.h:276: error: extra qualification ‘PhoneTypeSelector::’ on member ‘addType’

make[5]: *** [.obj/release-shared/abtable.o] Error 1

make[5]: Leaving directory `/root/yizhi/host/qtopia-free-2.2.0/qtopia/src/libraries/qtopiapim'

make[4]: *** [all] Error 2

解决办法:去掉 PhoneTypeSelector::

继续编译:

../../../include/qtopia/pim/private/../../../../src/libraries/qtopiapim/numberentry_p.h: At global scope:

../../../include/qtopia/pim/private/../../../../src/libraries/qtopiapim/numberentry_p.h:106: error: extra qualification ‘NumberEntryDialog::’ on member ‘eventFilter’

make[5]: *** [.obj/release-shared/numberentry.o] Error 1

make[5]: Leaving directory `/root/yizhi/host/qtopia-free-2.2.0/qtopia/src/libraries/qtopiapim'

make[4]: *** [all] Error 2

解决办法:去掉NumberEntryDialog::’

继续编译

In file included from addressbook.cpp:40:

ablabel.h: At global scope:

ablabel.h:78: error: extra qualification ‘AbLabel::’ on member ‘decodeHref"

解决办法:去掉‘AbLabel::’

继续编译

In file include from minefiled.cpp:35

minefiled.h:105: error: extra qualification 'MineFiled::' on member

'setState'

minefiled.h:106: error: extra qualification 'MineFiled::' on member

'placeMines'

解决办法:

编辑 qtopia-free-2.2.0/qtopia/src/games/minesweep/minefiled.h

修改106行和105行: 删除'MineFiled::'即可

继续编译

buttoneditordialog.h:56 error:extra qualification 'ButtonEditorDialog::' on member

'actionFor'

解决办法:

编辑qtopia-free-2.2.0/qtopia/src/settings/buttoneditor/buttoneditordialog.h

将'ButtonEditorDialog::' 删除即可

继续编译

出现packagewizard.h:106:error: extra qualification 'PackageWizard::' on member

'current'

解决办法

编辑qtopia-free-2.2.0/qtopia/src/settings/qipkg/packagewizard.h

将'PackageWizard::'删除即可

继续编译

出现 keboard.h:60 error:extra qualification 'KeboardPicks::' on member

'KeboardPicks'

解决办法

编辑qtopia-free-2.2.0/qtopia/src/plugins/inputmethods/keyboard/keyboard.h

将第60行的'KeboardPicks::'删除即可

继续编译

还会出现类似的错误,如extra qualification 'PolishedDecoration::' 、'IMToolButton::'

错误十八:未经定义的构造函数错误提示

.ui/release-shared/emaildlg.cpp: In constructor ‘EmailDialogBase::EmailDialogBase(QWidget*, const char*, bool, uint)’:

.ui/release-shared/emaildlg.cpp:65: error: no matching function for call to ‘QSizePolicy:SizePolicy(QSizePolicy::SizeType, QSizePolicy::SizeType, int, int, bool)’

/root/yizhi/host/qtopia-free-2.2.0/qt2/include/qsizepolicy.h:93: note: candidates are: QSizePolicy:SizePolizePolicj4

修改 qtopia-free-2.2.0/qtopia/src/applications/addressbook/.ui/release-shared/emaildlg.cpp 文件第65行

okButton = new QPushButton( this, "okButton" );

okButton->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)3, (QSizePolicy::SizeType)0, 0, 0, okButton->sizePolicy().hasHeightForWidth() ) );

Layout2->addWidget( okButton );

cancelButton = new QPushButton( this, "cancelButton" );

cancelButton->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)3, (QSizePolicy::SizeType)0, 0, 0, cancelButton->sizePolicy().hasHeightForWidth() ) );

Layout2->addWidget( cancelButton );

修改为

okButton = new QPushButton( this, "okButton" );

okButton->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)3, (QSizePolicy::SizeType)0,okButton->sizePolicy().hasHeightForWidth() ) );

Layout2->addWidget( okButton );

cancelButton = new QPushButton( this, "cancelButton" );

cancelButton->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)3, (QSizePolicy::SizeType)0,cancelButton->sizePolicy().hasHeightForWidth() ) );

Layout2->addWidget( cancelButton );

继续编译:

错误提示:.ui/release-shared/camerabase.cpp:41: error: no matching function for call to ‘QSizePolicy:SizePolicy(QSizePolicy::SizeType, QSizePolicy::SizeType, int, int, bool)’

/root/yizhi/host/qtopia-free-2.2.0/qt2/include/qsizepolicy.h:93: note: candidates are: QSizePolicy:SizePolicy(int)

解决办法:

编辑 qtopia-free-2.2.0/qtopia/src/applications/camera/.ui/release-shared/camerabase.cpp 文件的第41行

videocaptureview->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, 0, 0, videocaptureview->sizePolicy().hasHeightForWidth() ) );

修改为:

videocaptureview->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, videocaptureview->sizePolicy().hasHeightForWidth() ) );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值