我目前正在尝试跨编译我以前开发的跨平台库,以便在Android上使用它。 为此,我使用NDK提供的arm-linux-androideabi-g ++(4.9)编译器,并链接也存在于NDK中的gnu-libstdC++。Android上的完整C++ 11支持
不幸的是,由于使用了一些C++ 11功能,编译将不会成功。 这些特征是“std :: to_string”或“std :: stof”这样的“string.h”中存在的特定方法,如果必须的话,可以用其他方法轻松替换。 但我也使用更复杂的,比如来自“future.h”的东西,如std :: future和std :: async。
我在文件“ndk/sources/cxx-stl/gnu-libstdC++/4.9/bits/basic_string.h”中找到了“string.h”的编译错误原因,下面的语句返回假(_GLIBCXX_USE_C99没有定义):
//basic_string.h
#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
//methods I want to use
#endif
从我的理解,这些限制是由Android的仿生libc中引起的。
我有什么办法解决这个问题?
我已经试过使用CrystaX NDK,但它只解决了我的“string.h”问题,我宁愿找到更标准的解决方案。
如何使用不特定于Android的ARM交叉编译器?
谢谢。
我已经回复给你[android-ndk](https://groups.google.com/forum/#!topic/android-ndk/6NjpXqr7QWQ)组,但它今天工作的时间很长,所以我的答案仍然没有出现在那里。关于 - 你能说更详细的问题吗?应该没有问题阻止它的使用,所以它可能是你的错误或CrystaX NDK中的错误。如果有问题,我们很乐意解决它,所以请让我知道什么是错的。顺便说一句,您可以使用我们的[bug跟踪器](https://tracker.crystax.net/projects/ndk)来存档,我们会尽快解决问题。 –
2015-04-01 18:35:13