Cross-compiling Qt Embedded 5.5 for Raspberry Pi 2 – libicui18n.so.48 not found

Sysprogs forums Forums VisualGDB Cross-compiling Qt Embedded 5.5 for Raspberry Pi 2 – libicui18n.so.48 not found

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #7345
    StealthMicro
    Participant

    After two days of compiling and installing I get the following message now when trying to run an example.

    ./qopenglwidget: error while loading shared libraries: libicui18n.so.48: cannot open shared object file: No such file or directory

    I do have in /usr/lib a libicui18b.so.52  so I symlinked a few files like that from 52 to 48 and now I get an error of

    ./qopenglwidget: symbol lookup error: /usr/local/qt5/lib/libQt5Core.so.5: undefined symbol: ucnv_getDefaultName_48

    So obviously something is wrong here.  I followed that guide to the letter.

    Any help would be appreciated.  I have this awful feeling that I am in for another 2 days of compiling and installing.  This is on a fast computer!

    #7346
    support
    Keymaster

    Hi,

    It looks like you compiled your program against libicu18n version 48 and then updated your Raspberry PI image to libicu18n version 52.

    Please delete the cross-compiled Qt, resynchronize the sysroot and build it again so that it is linked against version 52, not version 48.

    #7349
    StealthMicro
    Participant

    Can you tell me if 20 hours is the normal amount of time to compile on a fairly fast computer?  Then the make install took about 3 hours.

    Should I do a make -j8 to use all the cores?

    #7351
    StealthMicro
    Participant

    Well apparently that does not work.  make -j4 seams to freeze the make process shortly after it starts.

    Do you have a precompiled binary for the Qt5.5 and Raspberry PI like you apparently do for the Beaglebone?

    Spending 2 days compiling and installing Qt is a waste of time if its easy to just have a precompiled binary ready to go.  It would be really awesome if you took a new image of Raspian and compiled Qt5.5 into it and provided that img.  Half tempted to do that myself to help others.  But what I do not understand is why this is not already done.

    What would be even better is to be able to apt-get install Qt5.5

    #7352
    support
    Keymaster

    Hi,

    The Qt build does usually take a lot of time and multi-threaded build usually hangs due to a bug in MinGW. Sorry, this is a limitation of the MinGW-based toolchain and does not come from us.

    We do offer a service of building tricky libraries and tools for our customers. If you want to sponsor building and testing a Qt5 build for the latest Raspberry Pi image, please contact our sales for a quote. Otherwise feel free to share any problems you encounter while building it and we will help you overcome them.

    #7355
    StealthMicro
    Participant

    Correct me if I am missing something here.  So everyone who wants to make Qt5.5 work with a Raspberry PI needs to a) compile it on their raspberry pi over 3 days.  b) cross compile it on their computer over 1-2 days.

    There really should be a c) download this precompiled version from the people who bring all of this to you (sysprogs).

    Now I am not saying you guys should do everything for free but lets face it.  Your VisualGDB  software is not free by any stretch.  We pay for and use your software to make our lives easier.  Seems to me that building a new Qt as it becomes available is a logical step for you guys to help us little guys who support you buy purchasing your great products.

    I run a small company with only 3 programmers and evaluating your software takes a fair amount of time.  For us 2 days is a lot of wasted time even though this can all be done in the background as long as we are not doing anything to jeopardize the build like working on device drivers or needing to reboot for other reasons or heaven forbid a blue screen of death.  Being a small company we can not afford to sponsor this effort but I really don’t think anyone should have too.

    Qt5.5 marks a pretty significant change in the Qt5 platform and I would think it would be a good thing for you to be able to offer these prebuilt.  would definitely go a long way for a customer like us.

    Just my 2c

     

    #7356
    StealthMicro
    Participant

    Something is definitely looking for the _48 stuff.

    I deleted /usr/local/qt5

    I deleted the qt-everywhere-opensource-src-5.5.0 directory.

    I ran C:\SysGCC\raspberry\TOOLS\UpdateSysroot.bat

    I added /opt to the list to

    /lib
    /usr/include
    /usr/lib
    /usr/local/include
    /usr/local/lib

    Synchronized

    Reran  configure twice making the proper adjustments.

    Started: make

    And now get these errors…

    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `u_errorName_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_openTimeZones_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_inDaylightTime_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_getStandardName_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `u_strToLower_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucol_setAttribute_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `uenum_next_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_close_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_setMillis_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucol_strcoll_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_getDSTSavings_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_open_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_toUnicode_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_getTimeZoneDisplayName_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_setSubstChars_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_fromUnicode_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_openCountryTimeZones_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_getDefaultName_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucol_open_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_close_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_compareNames_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_openTimeZoneIDEnumeration_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_countAliases_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `u_strToUpper_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_get_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_countAvailable_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_clone_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_getAvailableName_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucol_close_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_open_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucol_getSortKey_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `uenum_close_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_getMaxCharSize_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucnv_getAlias_48′
    C:/build/qt-build/qtbase/lib/libQt5Core.so: undefined reference to `ucal_getDefaultTimeZone_48′
    collect2.exe: error: ld returned 1 exit status
    make[5]: *** [sharedmemory] Error 1
    make[5]: Leaving directory `/c/build/qt-build/qtbase/examples/corelib/ipc/sharedmemory’
    make[4]: *** [sub-sharedmemory-make_first] Error 2
    make[4]: Leaving directory `/c/build/qt-build/qtbase/examples/corelib/ipc’
    make[3]: *** [sub-ipc-make_first] Error 2
    make[3]: Leaving directory `/c/build/qt-build/qtbase/examples/corelib’
    make[2]: *** [sub-corelib-make_first] Error 2
    make[2]: Leaving directory `/c/build/qt-build/qtbase/examples’
    make[1]: *** [sub-examples-make_first] Error 2
    make[1]: Leaving directory `/c/build/qt-build/qtbase’
    make: *** [module-qtbase-make_first] Error 2

    #7358
    support
    Keymaster

    Hi,

    We understand your frustration with the build. However the problem is that there are many libraries and platforms supported by VisualGDB, so if we wanted to ship prebuilt versions of various libraries, we would have to rise the VisualGDB license price or switch it to a subscription model, making it unacceptable for many users. Hence we decided to provide free cross-toolchains (that are especially tough to build), but leave building of third-party libraries not included in the distros to our users.

    Regarding the “48” suffix, most likely some of the headers is hardcoding this version and it did not get updated during sysroot resync. You can pinpoint it as follows:

    1. Search the object files (.o) for the ucnv_getStandardName_48 function name
    2. Once located one file, delete it and build Qt again with verbose mode on
    3. Find an copy the command line used to build the .o file
    4. Replace the -c with -E and .o with .E and run the command line manually
    5. The .E file will contain preprocessed .cpp file (having all macros expanded). Search for ucnv_getStandardName_48 in the .E file to see where it comes from.
    6. Use the comments in the preprocessed file to pinpoint which header is causing this.

     

    #7360
    StealthMicro
    Participant

    Now that makes sense.  I can understand there being many different platforms and libraries that you support.  It is just frustrating is all really.  I guess instead of whining about it I should just do it and make it available for others.

    Great tips on how to track down where the _48 is coming from thank you.  I will do exactly that.  If I find an explanation that will help others I will let you know so you can add it to the tutorial.

    Thank you for letting me vent.

    #7370
    support
    Keymaster

    No problem. We always try to be transparent about things we support and don’t support and we always welcome feedback.

    Feel free to share your findings on the _48 problem and do not hesitate to ask for further advice if you get stuck.

Viewing 10 posts - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.