Qt Build for WinCe 6.0 fails with Link errors



  • Hi ,

      I was trying to build Qt for Wince (PocketPc SDK). But there were
    

    some errors. Please help me to resolve these issues

        1) Configuration :
          
         configure -platform win32-msvc2005 -xplatform wincewm50pocket-msvc2005 
    
         ####Nmake paths####
    
          set INCLUDE=d:\Program Files\Microsoft Visual Studio 8\VC\ce\include;D:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\PocketPC2003\Include
    

    set LIB=d:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\armv4;D:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\PocketPC2003\Lib\armv4

    set PATH=d:\Program Files\Microsoft Visual Studio 8\VC\ce\bin\x86_arm;%PATH%

       *2) Error* - Link error. After compilation it throws this error
    

    moc_qeventtransition.cpp
    Generating Code...
    link /LIBPATH:"d:\Qt\4.7\lib" /LIBPATH:"d:\Qt\4.7\lib" /NOLOGO /NODEFAULTLIB:OLDNAMES.LIB /DEBUG /SUBSYSTEM:WINDOWSCE,5.01 /MACHINE:THUMB /DLL /VERSION:4.73 /OUT:....\lib\QtCored4.dll @C:\DOCUME~1\KRISHN~1.SW-\LOCALS~1\Temp\nm9AD.tmp
    Creating library ....\lib\QtCored4.lib and object ....\lib\QtCored4.exp
    QtCored_pch.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) moc_qlocale.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    moc_qfilesystemwatcher_p.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) moc_qfilesystemwatcher_win_p.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    moc_qtextcodecplugin.obj : error LNK2019: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) referenced in function "public: static class QString __cdecl QTextCodecPlugin::trUtf8(char const *,char const *,int)" (?trUtf8@QTextCodecPlugin@@SA?AVQString@@PBD0H@Z) qsignaltransition.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qeventtransition.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qxmlstream.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    moc_qfuturewatcher.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qstate.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qfinalstate.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qhistorystate.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qabstracttransition.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qutfcodec.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qtextcodecplugin.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qstatemachine.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qabstractstate.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qlatincodec.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qsimplecodec.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qtextcodec.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qtsciicodec.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qwineventnotifier_p.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qsharedmemory_win.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qsystemsemaphore_win.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qisciicodec.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qsharedmemory.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qsystemsemaphore.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qeventdispatcher_win.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qcoreapplication_win.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qsocketnotifier.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qtimer.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qtranslator.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qvariant.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@) qmimedata.obj : error LNK2001: unresolved external symbol "const type_info::vftable'" (??_7type_info@@6B@)
    qobject.obj : error LNK2001: unresolved external symbol "const type_info::`vftable'"

        Please help me to resolve this issue.
    

    Regards,
    Krishna



  • My Build last time i did had substantially longer paths including some out of our WinCE project ill post them below incase they are of any use to you. PCB06998_ARMV4I will be probably different in your case.
    configure -platform win32-msvc2005 -xplatform wince60standard-armv4i-msvc2005 -rtti -exceptions -stl -qt-gif -multimedia -audio-backend

    INCLUDE:
    @C:/Program Files/Microsoft Visual Studio 8/VC/ce/include;
    C:/Program Files/Microsoft Visual Studio 8/VC/ce/atlmfc/include;
    C:/Program Files/Microsoft Visual Studio 8/SmartDevices/SDK/SQL Server/Mobile/v3.0;
    C:/WINCE600/PUBLIC/COMMON/SDK/INC;
    C:/WINCE600/OSDesigns/OSDesign10/Wince600/PCB06998_ARMV4I/cesysgen/ddk/inc;
    C:/WINCE600/OSDesigns/OSDesign10/Wince600/PCB06998_ARMV4I/cesysgen/oak/inc;
    C:/WINCE600/OSDesigns/OSDesign10/Wince600/PCB06998_ARMV4I/cesysgen/sdk/inc;
    C:\WINCE600\PUBLIC\IE\SDK\INC@
    LIB:
    @C:/WINCE600/OSDesigns/OSDesign10/Wince600/PCB06998_ARMV4I/cesysgen/sdk/lib/ARMV4I/debug;
    C:/WINCE600/OSDesigns/OSDesign10/Wince600/PCB06998_ARMV4I/cesysgen/oak/lib/ARMV4I/debug;
    C:/WINCE600/OSDesigns/OSDesign10/Wince600/PCB06998_ARMV4I/cesysgen/ddk/lib/ARMV4I/debug;
    C:/WINCE600/PUBLIC/COMMON/SDK/LIB/ARMV4I/DEBUG;
    C:/WINCE600/PUBLIC/IE/OAK/LIB/ARMV4I/DEBUG;
    C:/Program Files/Microsoft Visual Studio 8/VC/ce/lib/armv4i;
    C:/Program Files/Microsoft Visual Studio 8/VC/ce/atlmfc/lib/armv4i;
    C:\WINCE600\PUBLIC\IE\SDK\LIB\ARMV4I\DEBUG;
    C:\WINCE600\OSDesigns\OSDesign10\Wince600\PCB06998_ARMV4I\cesysgen\sdk\lib\ARMV4I\retail;
    C:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\armv4i;
    C:\WINCE600\PUBLIC\COMMON\OAK\LIB\ARMV4I\DEBUG@
    Path:
    @C:/Program Files/Microsoft Visual Studio 8/VC/ce/bin/x86_arm;
    C:/Program Files/Microsoft Visual Studio 8/VC/ce/bin/x86_cex86;
    C:/Program Files/Microsoft Visual Studio 8/VC/bin;
    C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/bin;
    C:/Program Files/Microsoft Visual Studio 8/Common7/Tools;
    C:/Program Files/Microsoft Visual Studio 8/Common7/IDE;
    C:/Program Files/Microsoft Visual Studio 8/@



  • Did you build this from a source distribution, or from a binary distribution? Building from binary distributions usually create problems, so I would strongly recommend building from a source distribution.
    Also, I would suggest using the setcepaths script instead of setting the variables yourself.
    (I assume you've used the information on "this page":http://doc.qt.nokia.com/4.7-snapshot/install-wince.html, which also tells you that you can use setcepaths instead of setting them yourself.)

    I have successfully built Qt for Windows Mobile 6 several times, but I have always done it using shadow builds (see "this page":http://doc.qt.nokia.com/4.7-snapshot/shadow-builds-wince.html for more info). Note that you may have to omit the examples when doing a shadow build (-nomake examples).



  • hello,

     Thanks for your inputs. I tried to build shadow build. Again it fails in linking stage. I used setcepaths, but it failed in compilation itself saying "WinMain cannot not be overloaded". So I manually set the paths and was trying to build.
    
    1. I have PocketPC 2003 SDK installed on WinXp
    2. WinCe Platform Builder is also installed on my pc.
    3. I dont find Arm4i folder under my PocketPC SDK folder. There is only Arm4 folder.(SDK\PocketPC\lib\Arm4,SDK\PocketPC\Include\Arm4)
      I doubt the path and some libraries missing in my WinCe 6.0 platform builder installation.
    
    Please help me to resolve the issue.
    

    Regards,
    Krishna



  • The -xplatform wincewm50pocket-msvc2005 configure option is for the "standard" Windows Mobile 5 SDK (based on Windows CE 5.0).
    PocketPC 2003 is based on Windows CE 4.2

    Do you really have to use the PocketPC 2003 SDK ?

    If I remember correctly, Qt does not support officially supports pre-WM5.0 versions of Windows Mobile.
    If you want to try to add support for PocketPC 2003 you will have to add a custom folder in the mkspec subfolder of the Qt sources (i.e. pocketpc2003-msvc2005) and put there custom configuration files derived from the WM50 ones.

    Then as configure option you have to use -xplatform pocketpc2003-msvc2005 to select your custom build options and instead of using setcepaths you will have to manually set PATH, INCLUDE and LIB environment variables to point at msvc2005 for ARM and to the pocketpc2003 sdk include and lib folders.

    For example to set envirnment variables for msvc2005 and colibri600 sdk (a custom SDK for Windows CE 6.0) I did the following:
    set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\include;C:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\atlmfc\include;C:\Program Files (x86)\Windows CE Tools\wce600\Colibri600\Include\Armv4i
    set LIB=C:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\lib\armv4i;C:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\atlmfc\lib\armv4i;C:\Program Files (x86)\Windows CE Tools\wce600\Colibri600\Lib\ARMV4I
    set LIBPATH=C:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\lib\armv4i;C:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\atlmfc\lib\armv4i;C:\Program Files (x86)\Windows CE Tools\wce600\Colibri600\Lib\ARMV4I
    set PATH=C:\Program Files (x86)\Microsoft Visual Studio 8\VC\ce\bin\x86_arm;%PATH%

    Later following another discussion in this forum I discovered I could do the same with:
    checksdk.exe -sdk "Colibri600 (ARMV4I)" -script tmp_created_script_setup.bat
    tmp_created_script_setup.bat

    But I dont know if checksdk.exe works with pre-Windows CE 5.0 SDKs.



  • I forgot to add these links to previous discussions that may be useful:

    http://developer.qt.nokia.com/forums/viewthread/4230
    (building with custom SDKs etc. etc.)

    http://developer.qt.nokia.com/forums/viewthread/5341
    (where tiger86 found it si possible to use checksdk for custom sdks)



  • Krrish i never got set paths to work ether. I also had more build errors then link ones and spent a large amount of time using windows search to locate the required header files. Luckly for me the company i work for has since migrated to embedded linux so i don't have to deal with these issues anymore



  • @Krrish: Ditto for what SimonL said, I never got them working, but it's not too hard to just create your own batch file to set them. The paths won't change once you've got it to work so just version it and then it's job done.

    Another thing I've found is that using a shadow build is a must because the "clean" of a configuration rarely works (for me) so I just delete the shadow directory and start again.

    Could you post the configure line your using (for the shadow build) as this might help?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.