I cannot enable ICU library support with Qt-5.0.2
-
wrote on 13 May 2013, 10:21 last edited by
I've been trying to build Qt-5.0.2 with qtwebkit enabled. Webkit needs ICU library support, so I've installed the latest version of ICU in /usr/local.
However, the qtbase/configure script won't recognize it. It says "The ICU library support cannot be enabled." when the -icu swith is turned on. By the default, the configure script doesn't turn on the support.I set the PKG_CONFIG_PATH and the LD_LIBRARY_PATH correctly at the configuration.
How can I build the Qt-5.0.2 with the ICU support enabled and build atwebkit?
Regards,
-
wrote on 13 May 2013, 10:50 last edited by
Sorry, I forgot to mention my environment.
I'm using Vine Linux 6.1 (a RedHat Linux based Japanese distribution).
The kernel is 3.0.71.
I've installed glib-2.34.2, gtk+-3.6.4 and other required package in /usr/local.In addition to that, I've succeed to build Qt-5.1.0 from the git repository with qtwebkit. However, the WebKit doesn't seem to work correctly because Sigil-0.7.2 built with the Qt-5 won't boot.
-
The configure test for icu is in qtbase/config.tests/unix/icu , and tries to link against icuuc, icui18n. Try to compile it to see why it fails. Also, you can see the output of all configure tests by running configure with '-v'.
-
wrote on 13 May 2013, 13:13 last edited by
g++ icu.cpp returns the following:
/tmp/ccnrkiVm.o: In functionmain': icu.cpp:(.text+0x34): undefined reference to
ucol_open_51'
icu.cpp:(.text+0x5e): undefined reference to `ucol_close_51'
collect2: ld returned 1 exit status./configure -v also returns the similar message:
ICU auto-detection... ()
g++ -c -m64 -pipe -O2 -Wall -W -fPIE -I../../../mkspecs/linux-g++-64 -I. -o icu.o icu.cpp
g++ -m64 -Wl,-O1 -o icu icu.o -licuuc -licui18n
icu.o: In functionmain': icu.cpp:(.text+0x19): undefined reference to
ucol_open_51'
icu.cpp:(.text+0x34): undefined reference to `ucol_close_51'
collect2: ld returned 1 exit status
gmake: *** [icu] Error 1
ICU disabled.
The ICU library support cannot be enabled. -
so ... it looks like either your icu installation is broken, or it picks up the system ICU . Try to pass the location of the header/libraries via -L, -I, e.g.
configure -L /usr/local/icu/lib -I /usr/local/icu/include
-
wrote on 14 May 2013, 07:45 last edited by
I checke the locations of ICU library and headers then tried:
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib ./configure -v -L /usr/local/lib64/icu -I /usr/local/include/unicode -prefix /usr/local/Qt-5.0.2 -developer-build -opensource -icu
However, configure gave back the same message as the following:
ICU auto-detection... ()
g++ -c -m64 -pipe -O2 -Wall -W -fPIE -I../../../mkspecs/linux-g++-64 -I. -I/usr/local/include/unicode -o icu.o icu.cpp
g++ -m64 -Wl,-O1 -o icu icu.o -L/usr/local/lib64/icu -licuuc -licui18n
icu.o: In functionmain': icu.cpp:(.text+0x19): undefined reference to
ucol_open_51'
icu.cpp:(.text+0x34): undefined reference to `ucol_close_51'
collect2: ld returned 1 exit status
gmake: *** [icu] Error 1
ICU disabled.
The ICU library support cannot be enabled.Then I tried to find the header files including ucol_open_51 and ucol_close_51 by:
grep -E "ucol_open_51|ucol_close_51" /usr/local/include/unicode/*No header files were found.
On the other hand,
grep -E "ucol_open|ucol_close" /usr/local/include/unicode/*
found many headere files including ucol_open or ucol_close.I wonder if icu.cpp tries to find wrong functions, ucol_open_51 and ucol_close_51.
Regards,
-
Just have a look at config.tests/unix/icu/icu.cpp . It #include's <unicode/utypes.h> . That is, it tries to resolve ucol_open_51 is because it actually picks up the system header from /usr/unicode/utypes.h, which do a #define ucol_open ucol_open_51 . So, you're linking against the right libraries, but not compiling with the right headers.
What you should do is adding '/usr/local/include' to the search path, instead of '/usr/local/include/unicode'.
-
wrote on 14 May 2013, 08:11 last edited by
PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/lib ./configure -v -I /usr/local/include -prefix /usr/local/Qt-5.0.2 -developer-build -opensource -icu
gave back a same message:
ICU auto-detection... ()
g++ -c -m64 -pipe -O2 -Wall -W -fPIE -I../../../mkspecs/linux-g++-64 -I. -I/usr/local/include -o icu.o icu.cpp
g++ -m64 -Wl,-O1 -o icu icu.o -licuuc -licui18n
icu.o: In functionmain': icu.cpp:(.text+0x19): undefined reference to
ucol_open_51'
icu.cpp:(.text+0x34): undefined reference to `ucol_close_51'
collect2: ld returned 1 exit status
gmake: *** [icu] Error 1
ICU disabled.
The ICU library support cannot be enabled. -
Please specify '-L /usr/local/lib64' to configure.
-
wrote on 14 May 2013, 08:25 last edited by
Thank you.
The configuration has successfully ended. -
wrote on 18 Jun 2013, 21:35 last edited by
I ran into a similar problem while compiling qt-5.0.2 for linux-x86; however, reconfigure with "-L <path to icu lib>" did not help much. qt-5.0.2 was still wanting to use the icu includes from the source code folders; ie wtf/icu, javascriptcore/icu. I renamed those include folders to icu.bak and used the -L configure option and everything worked.
I also found some other bugs in the build system, for example if you have xlib or libxrender installed on non-standard path; the build system would have problems linking with such libraries. Below is a patch I made to fix the issue by reverting to pkg-config, instead of assuming xlib and xrender are installed in standard paths.
I also have about 5 more patches; not sure where/who to summit the patches to. thanks
@
--- qtbase/configure.vanilla 2013-06-14 11:01:56.000000000 -0400
+++ qtbase/configure 2013-06-14 14:15:18.000000000 -0400
-4775,14 +4775,18
QMakeVar add DEFINES QT_NO_EVDEV
fi+QMAKE_LIBS_XLIB=
$PKG_CONFIG --libs --cflags x11 2>/dev/null
+Check we actually have X11 :-)
-if compileTest x11/xlib "XLib"; then
+if compileTest x11/xlib "XLib" $QMAKE_LIBS_XLIB ; then
QT_CONFIG="$QT_CONFIG xlib"
fi+QMAKE_LIBS_XRENDER=
$PKG_CONFIG --libs --cflags x11 2>/dev/null
+auto-detect Xrender support
if [ "$CFG_XRENDER" != "no" ]; then
- if compileTest x11/xrender "Xrender"; then
-
if compileTest x11/xrender "Xrender" $QMAKE_LIBS_XRENDER; then
CFG_XRENDER=yes
QT_CONFIG="$QT_CONFIG xrender"
else
-4839,7 +4843,7# auto-detect XInput2 support. Needed by xcb too. if [ "$CFG_XINPUT2" != "no" ]; then
-
if compileTest x11/xinput2 "XInput2"; then
-
if compileTest x11/xinput2 "XInput2" $QMAKE_LIBS_XLIB; then CFG_XINPUT2=yes CFG_XINPUT=no else
@
-
Hi tpham3783, great that you've created patches! However, for legal reasons they cannot be imported into 'official' Qt unless you submit them to codereview.qt-project.org, and accept the license there:
http://qt-project.org/wiki/Qt-Contribution-Guidelines
The process might look a bit intimidating, but in reality it should really be a 10 minute affair (I think someone even created a video on youtube, but I can't find it right now ...)
Looks like your patches should go into qtbase, stable branch.