我正在尝试在 CentOS 版本 5.8 (Final) 上安装 ICU 49。我知道的唯一方法是通过源代码进行编译。
我执行以下操作:
./runConfigureICU Linux
gmake
编译结束时出现以下错误:
make[2]: Leaving directory `/root/icu/icu/source/tools/toolutil'
make[1]: Making `all' in `ctestfw'
make[2]: Entering directory `/root/icu/icu/source/tools/ctestfw'
generating dependency information for ucln_ct.c
generating dependency information for uperf.cpp
generating dependency information for datamap.cpp
generating dependency information for testdata.cpp
generating dependency information for tstdtmod.cpp
generating dependency information for ctest.c
make[2]: Leaving directory `/root/icu/icu/source/tools/ctestfw'
make[2]: Entering directory `/root/icu/icu/source/tools/ctestfw'
gcc -D_REENTRANT -I../../common -I../../i18n -I./../toolutil -I. -DU_ATTRIBUTE_DEPRECATED= -DT_CTEST_IMPLEMENTATION -O3 -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long -c -DPIC -fPIC -o ctest.o ctest.c
g++ -D_REENTRANT -I../../common -I../../i18n -I./../toolutil -I. -DU_ATTRIBUTE_DEPRECATED= -DT_CTEST_IMPLEMENTATION -O3 -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long -c -DPIC -fPIC -o tstdtmod.o tstdtmod.cpp
g++ -D_REENTRANT -I../../common -I../../i18n -I./../toolutil -I. -DU_ATTRIBUTE_DEPRECATED= -DT_CTEST_IMPLEMENTATION -O3 -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long -c -DPIC -fPIC -o testdata.o testdata.cpp
g++ -D_REENTRANT -I../../common -I../../i18n -I./../toolutil -I. -DU_ATTRIBUTE_DEPRECATED= -DT_CTEST_IMPLEMENTATION -O3 -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long -c -DPIC -fPIC -o datamap.o datamap.cpp
g++ -D_REENTRANT -I../../common -I../../i18n -I./../toolutil -I. -DU_ATTRIBUTE_DEPRECATED= -DT_CTEST_IMPLEMENTATION -O3 -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long -c -DPIC -fPIC -o uperf.o uperf.cpp
gcc -D_REENTRANT -I../../common -I../../i18n -I./../toolutil -I. -DU_ATTRIBUTE_DEPRECATED= -DT_CTEST_IMPLEMENTATION -O3 -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long -c -DPIC -fPIC -o ucln_ct.o ucln_ct.c
g++ -O3 -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long -shared -Wl,-Bsymbolic -Wl,-soname -Wl,libicutest.so.49 -o libicutest.so.49.1.2 ctest.o tstdtmod.o testdata.o datamap.o uperf.o ucln_ct.o -L../../lib -licutu -L../../lib -licui18n -L../../lib -licuuc -L../../stubdata -licudata -lpthread -ldl -lm
rm -f libicutest.so.49 && ln -s libicutest.so.49.1.2 libicutest.so.49
rm -f libicutest.so && ln -s libicutest.so.49.1.2 libicutest.so
make[2]: Leaving directory `/root/icu/icu/source/tools/ctestfw'
make[1]: Making `all' in `makeconv'
make[2]: Entering directory `/root/icu/icu/source/tools/makeconv'
generating dependency information for gencnvex.c
generating dependency information for genmbcs.cpp
generating dependency information for ucnvstat.c
generating dependency information for makeconv.c
make[2]: Leaving directory `/root/icu/icu/source/tools/makeconv'
make[2]: Entering directory `/root/icu/icu/source/tools/makeconv'
gcc -D_REENTRANT -I../../common -I./../toolutil -DU_ATTRIBUTE_DEPRECATED= -O3 -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long -c -o makeconv.o makeconv.c
gcc -D_REENTRANT -I../../common -I./../toolutil -DU_ATTRIBUTE_DEPRECATED= -O3 -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long -c -o ucnvstat.o ucnvstat.c
g++ -D_REENTRANT -I../../common -I./../toolutil -DU_ATTRIBUTE_DEPRECATED= -O3 -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long -c -o genmbcs.o genmbcs.cpp
gcc -D_REENTRANT -I../../common -I./../toolutil -DU_ATTRIBUTE_DEPRECATED= -O3 -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long -c -o gencnvex.o gencnvex.c
g++ -O3 -W -Wall -ansi -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long -o ../../bin/makeconv makeconv.o ucnvstat.o genmbcs.o gencnvex.o -L../../lib -licutu -L../../lib -licui18n -L../../lib -licuuc -L../../stubdata -licudata -lpthread -ldl -lm
../../lib/libicuuc.so: undefined reference to `__sync_val_compare_and_swap_4'
../../lib/libicuuc.so: undefined reference to `__sync_add_and_fetch_4'
../../lib/libicuuc.so: undefined reference to `__sync_sub_and_fetch_4'
collect2: ld returned 1 exit status
make[2]: *** [../../bin/makeconv] Error 1
make[2]: Leaving directory `/root/icu/icu/source/tools/makeconv'
make[1]: *** [all-recursive] Error 2
make[1]: Leaving directory `/root/icu/icu/source/tools'
make: *** [all-recursive] Error 2
我在 Google 上找不到任何可以帮我的东西。我使用的icu4c-49_1_2-src.tgz
是http://site.icu-project.org/download/49
答案1
我可能有点晚了,但是我在 32 位 SLES 11 SP2 上构建 ICU 49.1.2 时遇到了完全相同的问题。
经过一些研究和下面的错误报告后,我尝试更新我的 gcc/g++ 安装。 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40134
使用 gcc/g++.46(执行“make clean”后),我能够构建库。显然,这对 OP 来说可能有点晚了,但也许其他人会从中受益。
答案2
我的建议是(当我尝试重现您的错误时)。不要。
我在一个 yum 存储库中找到了所需的库。
libicu.i386 : International Components for Unicode - libraries
libicu-devel.i386 : Development files for International Components for Unicode
libicu-doc.i386 : Documentation for International Components for Unicode
忽略那些是 i386,只是我正在使用的旧服务器。
Name : libicu
Arch : i386
Version : 3.6
Release : 5.16.1
Size : 13 M
Repo : installed
Summary : International Components for Unicode - libraries
URL : http://www.ibm.com/software/globalization/icu/
License : X License
Description: International Components for Unicode - libraries.
我相信它位于默认的 Centos 存储库中。我建议您尝试在 yum 中搜索 libicu。
我将尝试重现从源代码构建时出现的错误。