【发布时间】:2015-06-06 10:41:27
【问题描述】:
我目前正在尝试交叉编译我之前开发的跨平台库,以便在 Android 上使用它。 为此,我使用了 NDK 提供的 arm-linux-androideabi-g++ (4.9) 编译器,并链接了 NDK 中也存在的 gnu-libstdc++。
很遗憾,由于使用了一些 C++11 特性,编译不会成功。 此类功能是“string.h”中存在的特定方法,例如 std::to_string 或 std::stof,如果需要,可以很容易地被其他方法替换。 但我也使用更复杂的,比如来自“future.h”的东西,比如 std::future 和 std::async。
我在文件“ndk/sources/cxx-stl/gnu-libstdc++/4.9/bits/basic_string.h”中找到了“string.h”编译错误的原因,以下语句返回false (_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 Bionic libc 引起的。
我有什么办法来解决这个问题?
我已经尝试过使用 CrystaX NDK,但它只解决了我的“string.h”问题,我宁愿找到一个更标准的解决方案。
使用非 Android 专用的 ARM 交叉编译器怎么样?
谢谢。
【问题讨论】:
-
我已经在android-ndk 群里回复你了,但是今天它的工作延迟很大,所以我的答案仍然没有出现在那里。关于
- 你能说得更详细些吗?阻止它的使用应该没有问题,所以要么是你的错误,要么是 CrystaX NDK 中的错误。如果它是错误,我们很乐意修复它,所以请让我知道究竟出了什么问题。顺便说一句,您可以使用我们的bug tracker 提交工单,我们会尽快解决问题。
标签: android c++11 android-ndk cross-compiling