ICU库的Andr​​oid NDK [英] ICU library in Android NDK

查看:570
本文介绍了ICU库的Andr​​oid NDK的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个C库,它依赖于ICU库JNI封装(libicuuc.so和libicui18n.so)。

I am trying to create a JNI wrapper for a C library that depends on the ICU libraries (libicuuc.so and libicui18n.so).

我想在我的NDK ICU4C建设(标准和CrystaX版本,在Mac OS X的计算机上),并一直运行到链接问题是这样的:

I tried building ICU4C in my NDK (both standard and CrystaX versions, on a Mac OS X machine) and kept running into linking issues like this:

/Users/kyip/KyVmShared/KyAndroid/myproject/obj/local/armeabi/objs/icuuc/udata.o: In function `openCommonData':
/Users/kyip/KyVmShared/KyAndroid/myproject/jni/icu4c/common/udata.c:836: undefined reference to `icudt42_dat'
/Users/kyip/KyVmShared/KyAndroid/myproject/obj/local/armeabi/objs/icuuc/ustr_wcs.o: In function `_strFromWCS':
/Users/kyip/KyVmShared/KyAndroid/myproject/jni/icu4c/common/ustr_wcs.c:365: undefined reference to `wcstombs'
/Users/kyip/KyVmShared/KyAndroid/myproject/jni/icu4c/common/ustr_wcs.c:415: undefined reference to `wcstombs'
/Users/kyip/KyVmShared/KyAndroid/myproject/jni/icu4c/common/ustr_wcs.c:314: undefined reference to `wcstombs'
/Users/kyip/KyVmShared/KyAndroid/myproject/obj/local/armeabi/objs/icuuc/ustr_wcs.o: In function `_strToWCS':
/Users/kyip/KyVmShared/KyAndroid/myproject/jni/icu4c/common/ustr_wcs.c:164: undefined reference to `mbstowcs'
collect2: ld returned 1 exit status

我也试过在 UNI $ C在android系统$ C给予支持的建议NDK 但没有运气。我被困在:

I also tried the suggestion given at unicode support in android ndk but no luck. I got stuck at:

arm-eabi-g++ -I/ky/crystax/android-ndk-r4-crystax/build/platforms/android-8/arch-arm/usr/include/ -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -fno-short-enums -nostdlib -fPIC -DU_COMMON_IMPLEMENTATION  -D_REENTRANT -I../common -I../../icu/source/common -I../../icu/source/i18n   "-DDEFAULT_ICU_PLUGINS=\"/usr/local/lib/icu\" "  -DU_COMMON_IMPLEMENTATION -DHAVE_CONFIG_H  -I/ky/crystax/android-ndk-r4-crystax/build/platforms/android-8/arch-arm/usr/include/ -O3 -fno-short-wchar -DU_USING_ICU_NAMESPACE=0 -DU_GNUC_UTF16_STRING=0 -fno-short-enums -nostdlib -fPIC -DU_COMMON_IMPLEMENTATION  -std=c++0x  -fvisibility=hidden -c   -o errorcode.ao ../../icu/source/common/errorcode.cpp
In file included from ../../icu/source/common/unicode/ptypes.h:23,
                 from ../../icu/source/common/unicode/umachine.h:52,
                 from ../../icu/source/common/unicode/utypes.h:36,
                 from ../../icu/source/common/errorcode.cpp:17:
/ky/crystax/android-ndk-r4-crystax/build/platforms/android-8/arch-arm/usr/include/sys/types.h:122: error: 'uint64_t' does not name a type
make[1]: *** [errorcode.ao] Error 1
make: *** [all-recursive] Error 2

任何帮助将是AP preciated。

Any help would be appreciated.

推荐答案

这里是我解决了这个问题。这是肮脏的,但它的工作原理。的lib得到了编译:

Here is how i solved the problem. It is dirty but it works. The lib got compiled:

注释掉#如果U_HAVE_WCHAR_H 和相应的 #ENDIF 所以< wchar.h方式> 总是包含

comment out the #if U_HAVE_WCHAR_H and the respective #endif so the <wchar.h> is always included.

与替换previous uprv_wcstombs 定义:

replace the previous uprv_wcstombs definition with:

#define uprv_wcstombs(mbstr, wcstr, count) U_STANDARD_CPP_NAMESPACE wcs2mbs(mbstr, wcstr, count)

与替换previous uprv_mbstowcs 定义:

#define uprv_mbstowcs(wcstr, mbstr, count) U_STANDARD_CPP_NAMESPACE mbs2wcs(wcstr, mbstr, count)

2。文件:/icu4c/common/ustr_wcs.cpp

某处上方,下已有包括添加一行:

2. file: /icu4c/common/ustr_wcs.cpp

somewhere at the top, under the already existing includes add the line:

#include "../wcsmbs.h"

3。创建新的文件ICU4C / wcsmbs.h

size_t mbs2wcs(wchar_t * __ restrict pwcs, const char * __ restrict s, size_t n)
{

   mbstate_t mbs;
   const char *sp;
   memset(&mbs, 0, sizeof(mbs));
   sp=s;
   return (mbsrtowcs(pwcs,&sp,n,&mbs));
}


size_t wcs2mbs(char * __restrict s, const wchar_t * __restrict pwcs, size_t n)
{
   mbstate_t mbs;
   const wchar_t *pwcsp;
   memset(&mbs,0,sizeof(mbs));
   pwcsp = pwcs;
   return (wcsrtombs(s,&pwcsp,n,&mbs));
}

希望它帮助。

这篇关于ICU库的Andr​​oid NDK的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆