分享: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() ) );

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值