2012-01-13 79 views
3

我试图建立与Android NDK ICU支持sqlite的,在我的Android.mk我有以下几点:
的Android NDK - 错误与建设ICU支持sqlite的时候

SQLITE3_INCLUDE_DIRS := -I/home_folder/dev/platform_external_icu4c/common -I/home_folder/dev/platform_external_icu4c/i18n 

但是当我尝试编译我有一大堆undefined reference错误的:如libicuuc.a

 

./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuNext': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125631: undefined reference to `ubrk_current_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125632: undefined reference to `ubrk_next_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125640: undefined reference to `u_isspace_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125640: undefined reference to `u_isspace_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125660: undefined reference to `u_strToUTF8_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125639: undefined reference to `utf8_nextCharSafeBody_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuClose': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125605: undefined reference to `ubrk_close_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuLikeCompare': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125075: undefined reference to `u_foldCase_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125076: undefined reference to `u_foldCase_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125052: undefined reference to `utf8_countTrailBytes_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuOpen': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125573: undefined reference to `u_foldCase_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125588: undefined reference to `ubrk_open_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125582: undefined reference to `utf8_nextCharSafeBody_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125595: undefined reference to `ubrk_first_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125570: undefined reference to `utf8_nextCharSafeBody_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuLikeFunc': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125126: undefined reference to `utf8_nextCharSafeBody_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuCollationDel': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125312: undefined reference to `ucol_close_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuFunctionError': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125152: undefined reference to `u_errorName_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuLoadCollation': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125371: undefined reference to `ucol_open_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125382: undefined reference to `ucol_close_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuCollationColl': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125328: undefined reference to `ucol_strcoll_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuCaseFunc16': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125293: undefined reference to `u_strToUpper_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125295: undefined reference to `u_strToLower_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuRegexpFunc': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125216: undefined reference to `uregex_setText_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125223: undefined reference to `uregex_matches_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125234: undefined reference to `uregex_setText_46' 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125204: undefined reference to `uregex_open_46' 
./obj/local/armeabi/objs/sqlite3_jni/sqlite3secure.o: In function `icuRegexpDelete': 
/home_folder/workspace/ndk-sqlite/jni/sqlite3.c:125163: undefined reference to `uregex_close_46' 

 

回答

2

你交的节目包括目录,但你在实际的ICU LIB连接(.a)中这样的文件?如果你的ICU有.mk或直接通过LOCAL_STATIC_LIBRARIES(甚至直接通过LOCAL_LDFLAGS),他们需要通过APP_MODULES在你的Application.mk中指定。

APP_MODULES的第一种方法是首选。

+0

ICU已经可以在Android上连接到? – tofutim 2012-02-09 18:05:12

+0

Android上安装了一个ICU版本。但有一些问题需要解决:1)您必须依赖任何特定设备上的版本,并且这些版本会有所不同; 2)使ICU功能强大的内置数据(转换等)也会因设备而异。 – NuSkooler 2012-02-10 23:24:20

+0

您是否知道图表是否存在跨设备的ICU内置数据?听起来像是依靠风险。我需要Break Iterators。 – tofutim 2012-02-11 08:02:26