Създадох статичните библиотеки за ICU 49 и 50, но при свързване с която и да е от тях все още получавам 667 грешки на свързване като тези по-долу. Как мога да подходя към отстраняване на грешки и да разбера какъв е проблемът? Списъкът за поддръжка на интензивно отделение не предлага никаква помощ.
clang++ -ccc-gcc-name g++ -Wl,-E -o velocity main.o city.o auto_lua.o
obj_builder.o index.o obj.o str.o db.o datetime.o msg_parser.o
task_scheduler.o gc.o global_settings.o transaction.o schema.o
skip_node.o util.o thread_context.o hashtable_base.o attr.o
page_pool.o result_buffer.o server_epoll.o logging.o test_server.o
test_main.o -L../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.7 -lc++
-lllalloc -lluajit -ldl -lm -lrt -lboost_system -lboost_filesystem
-licuuc -licui18n -licudata -lgtest
../lib/libicui18n.a(ucol.ao): In function `uprv_new_collIterate_50':
ucol.cpp:(.text.uprv_new_collIterate_50+0x37): undefined reference to
`icu_50::UMemory::operator new(unsigned long)'
ucol.cpp:(.text.uprv_new_collIterate_50+0xd2): undefined reference to
`icu_50::UMemory::operator delete(void*)'
../lib/libicui18n.a(ucol.ao): In function `uprv_delete_collIterate_50':
ucol.cpp:(.text.uprv_delete_collIterate_50+0x2f): undefined reference
to `icu_50::UMemory::operator delete(void*)'
../lib/libicui18n.a(ucol.ao): In function `initializeFCD(UErrorCode*)':
ucol.cpp:(.text._ZL13initializeFCDP10UErrorCode+0x2c): undefined
reference to `icu_50::Normalizer2Factory::getNFCImpl(UErrorCode&)'
../lib/libicui18n.a(ucol.ao): In function `ucol_initCollator_50':
ucol.cpp:(.text.ucol_initCollator_50+0x126): undefined reference to
`utrie_unserialize_50'
../lib/libicui18n.a(ucol.ao): In function `ucol_prv_getSpecialCE_50':
ucol.cpp:(.text.ucol_prv_getSpecialCE_50+0x9f6): undefined reference
to `u_charDigitValue_50'
ucol.cpp:(.text.ucol_prv_getSpecialCE_50+0xc1f): undefined reference
to `u_charDigitValue_50'
Изпълнявайки nm върху компилираните статични библиотеки, виждам това:
nm -A libicu* | grep u_charDigitValue_50
libicui18n.a:unum.ao: U u_charDigitValue_50
libicui18n.a:decimfmt.ao: U u_charDigitValue_50
libicui18n.a:dcfmtsym.ao: U u_charDigitValue_50
libicui18n.a:ucol.ao: U u_charDigitValue_50
libicui18n.a:regexcmp.ao: U u_charDigitValue_50
libicui18n.a:rematch.ao: U u_charDigitValue_50
libicui18n.a:uregex.ao: U u_charDigitValue_50
libicui18n.a:tzfmt.ao: U u_charDigitValue_50
libicuuc.a:uchar.ao:0000000000000000 T u_charDigitValue_50
libicuuc.a:rbbiscan.ao: U u_charDigitValue_50
Което ме кара да вярвам (но не съм експерт), че функциите всъщност са дефинирани в статичните библиотеки с правилните имена (втори ред отдолу, забележете, че съвпада с името на липсващия символ в долната част на поставените грешки .)
Дефинирах U_STATIC_IMPLEMENTATION=1 и се опитах да компилирам както 49, така и 50 както под clang, така и под gcc. Аз съм на система ubuntu x64. Когато правя проверка след изграждане на статичните библиотеки, тя преминава всички тестове. Не знам как да продължа. Някакви идеи, които мога да опитам?