ICU 58.2 cross-compilation
-
Hi,
I was trying to build the webkit with qt5.8 for ARM platform ( am335x ), in the latest buildroot it is an option to use the webkit along with qt5.8.
However, this isn't the main question here. I need to build the ICU library to build qt with ICU support,
I get this error when verifying the libraries :icu.o: In function `main': icu.cpp:(.text.startup+0x1c): undefined reference to `ucol_open_58' icu.cpp:(.text.startup+0x38): undefined reference to `ucol_close_58'
The ucol_open and close function exiosts, but what about the _58 ?! Is that some kind of flag I need to add to my compiler while building the lib ?
-
@SimonB I assume you see this error when running Qt's configure and icu.cpp in question is ./config.tests/unix/icu/icu.cpp
Looks like your ICU library (for ARM) is not installed properly. Are you installing it with buildroot, or?
-
@Konstantin-Tokarev
Hi, I am not using buildroot for this build, I building it on the side ( host build, and target build )The target script looks like :
#! /bin/sh START_DIR=$PWD BASE_DIR=$(pwd) export PATH=$PWD/toolchain/arm-cortex_a8-linux-gnueabi/bin:/$PATH export SYSROOT=/media/projects/sbenoit/tor019-os/toolchain/arm-cortex_a8-linux-gnueabi/arm-cortex_a8-linux-gnueabi/sysroot CC=arm-cortex_a8-linux-gnueabi INSTALL_ROOT=$SYSROOT #Where it will be installed PREFIX=$PWD/buildroot/board/tornatech/filesystem export ICU_BUILD_DIR=$BASE_DIR/icu58-2 export ICU_SOURCE_DIR=$BASE_DIR/icu58-2/icu_source export ICU_HOST_DIR=$BASE_DIR/icu58-2/icu_host_build ### NOW THE TARGET BUILD ### cd $ICU_BUILD_DIR mkdir icu_target_build export ICU_TARGET_DIR=$BASE_DIR/icu58-2/icu_target_build #Build ICU for target cd $ICU_TARGET_DIR ICU_FLAGS="-I$ICU_SOURCE_DIR/source/common/ -I$ICU_SOURCE_DIR/source/tools/tzcode/ -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=1 -fno-short-enums -DU_HAVE_NL_LANGINFO_CODESET=0 -D__STDC_INT64__ -DU_TIMEZONE=0 -DUCONFIG_NO_LEGACY_CONVERSION=1 -DUCONFIG_NO_BREAK_ITERATION=1 -DUCONFIG_NO_COLLATION=1 -DUCONFIG_NO_FORMATTING=1 -DUCONFIG_NO_TRANSLITERATION=0 -DUCONFIG_NO_REGULAR_EXPRESSIONS=1" export CPPFLAGS="-I$SYSROOT/usr/include/ -I$SYSROOT/usr/include/ -I./include/ $ICU_FLAGS -pipe" export LDFLAGS="-L$SYSROOT/usr/lib/ -Wl,-dead_strip" sh $ICU_SOURCE_DIR/source/configure --host=arm-cortex_a8-linux-gnueabi -with-cross-build=$ICU_HOST_DIR --prefix=$PREFIX if ! make -j5; then echo -e "${RED}Error making ICU Target ( filesystem )!${NC}" exit 1 fi if ! make install; then echo -e "${RED}Error Installing ICU Target ( filesystem )!${NC}" exit 1 fi
I followed a guide which build it with a static build, I changed it to shared lib but that didn't help.
I see the QTConfig finding the libs, the libs folder is populated with :libicudata.so.58 libicudata.so.58.2 libicui18n.so libicui18n.so.58 libicui18n.so.58.2 libicuio.so libicuio.so.58 libicuio.so.58.2 libicutest.so libicutest.so.58 libicutest.so.58.2 libicutu.so libicutu.so.58 libicutu.so.58.2 libicuuc.so libicuuc.so.58 libicuuc.so.58.2
and all the other libs ...
I don't really understand why it tries to get the function ucol_open with the _58 at the end, this function is made with the shared library ?
I am not using buildroot, because we are using a unsupported kernel version, and I didn't want to bump the buildroot and mess up all the build.
So, on the side I am building qt5.8 with toolkit, with the kernel 4.1 and the beaglebone package to analyse how ICU is compiled . I hope I'll find a the magic flag/answer soon :P -
I got it to work by changing 2 things
export CPPFLAGS="-Os"
And by removing the prefix in the configure, and installing it twice ( one in the sysroot of the toolchain ) and the other in the filesystem for the target
sh $ICU_SOURCE_DIR/source/configure --host=arm-cortex_a8-linux-gnueabi -with-cross-build=$ICU_HOST_DIR --prefix="" if ! make -j5 DESTDIR=$SYSROOT install; then echo -e "${RED}Error making ICU Target ( sysroot )!${NC}" exit 1 fi if ! make -j5 DESTDIR=$PREFIX install; then echo -e "${RED}Error Installing ICU Target ( filesystem )!${NC}" exit 1 fi