我正在尝试构建一个使用boost序列化的Android应用程序。我已经使用arm 4.7的g ++构建了针对NDK r8d的库。然而,当我使用ndk-build编译我的本地代码到一个库中时,当编译器试图链接boost库中的一些代码时,我得到了“未定义的引用''mbtowc''和'未定义的引用''wctomb' 。如何实现android的mbtowc? (或者,理想情况下,如何不?)
对于NDK是否支持这些功能,我似乎无法得到明确的答案。
虽然它实现了这些功能,但根据Boost邮件列表的说法,CrystaX NDK并不是一个可选项,因为它与Boost一起使用时已知崩溃。
因此,如果NDK确实以某种方式实现了这些功能,为什么NDK-build无法与它们链接?我可以在NDK中的cstdlib中找到对它们的引用,我相信可能有一个我需要设置的标志,但我不确定如何或在哪里这样做。
如果没有它们的实现,有没有人有任何建议我可以自己写吗?我大致知道mbtowc及其补充应该做什么,但是没有太多编写低级C的经验,而且对Android/ARM体系结构没有太多的了解,所以我可以真正使用一些建议。
一个极其垃圾的办法是打电话回Java。另一个将链接到'libiconv'.It可能值得挖掘Android源代码并查看Java本身使用的库。从头开始重新实现代码页转换不是偶然的事情。 – 2013-03-18 16:28:13
您可以简单地通过NDK标头grep来检查功能可用性。我很好奇你对CrystaX NDK和Boost的看法?我们已经使用了很多年了。 – NuSkooler 2013-03-19 20:57:26
你有没有使用序列化库?这就是我需要的,这需要默认情况下支持wchar的Android不存在。不幸的是,有太多这样的变量来明确说明哪些库可以在不同的平台上工作,或者使boost的兼容性全有或全无。 看来有将配置提升打造与wchars不支持在目标平台上的假设预处理器定义。我遇到了其他试图测试该方法的问题。我会在发布时发布我的发现。 – 2013-04-05 20:02:38