如何为android实现mbtowc?(或者,理想情况下,如何不?)

Wes*_*ugh 4 c android boost arm android-ndk

我正在尝试构建一个使用boost序列化的Android应用程序.我使用arm 4.7的g ++构建了针对NDK r8d的库.然而,当我使用ndk-build将我的本机代码编译到库中时,当编译器尝试从boost头文件中链接一些代码时,我得到"对'mbtowc'的未定义引用"和"对'wctomb'的未定义引用" .

关于NDK是否支持这些功能,我似乎无法得到明确的答案.

虽然它实现了这些功能,但根据Boost邮件列表,CrystaX NDK不是一个选项,因为它在与Boost一起使用时会发生崩溃.

那么,如果NDK以某种方式实现这些功能,为什么NDK-build无法链接它们呢?我可以在NDK中的cstdlib中找到对它们的引用,我相信可能有一个我需要设置的标志,但我不确定如何或在何处这样做.

如果没有实现它们,有没有人对我如何自己编写它们有任何建议?我大致知道mbtowc及其补充应该做什么,但没有很多编写低级C的经验,并且对Android/ARM架构没有太多了解,我真的可以使用一些建议来做到这一点.

KAl*_*lO2 9

#ifdef ANDROID
int wctomb(char *s, wchar_t wc) { return wcrtomb(s,wc,NULL); }
int mbtowc(wchar_t *pwc, const char *s, size_t n) { return mbrtowc(pwc, s, n, NULL); }
#endif
Run Code Online (Sandbox Code Playgroud)