完成C++;11对Android的支持

完成C++;11对Android的支持,android,c++11,android-ndk,cross-compiling,Android,C++11,Android Ndk,Cross Compiling,我目前正试图交叉编译一个我以前开发的跨平台库,以便在Android上使用它。 为此,我使用NDK提供的arm-linux-AndroidABI-g++(4.9)编译器,并链接NDK中也存在的gnu libstdc++ 不幸的是,由于使用了一些C++11特性,编译不会成功。 这些特性是“string.h”中存在的特定方法,如std::to_string或std::stof,如果必须的话,它们可以很容易地被其他方法替换。 但我也使用更复杂的,比如来自“future.h”的东西,比如std::futu

我目前正试图交叉编译一个我以前开发的跨平台库,以便在Android上使用它。 为此,我使用NDK提供的arm-linux-AndroidABI-g++(4.9)编译器,并链接NDK中也存在的gnu libstdc++

不幸的是,由于使用了一些C++11特性,编译不会成功。 这些特性是“string.h”中存在的特定方法,如std::to_string或std::stof,如果必须的话,它们可以很容易地被其他方法替换。 但我也使用更复杂的,比如来自“future.h”的东西,比如std::future和std::async

我已经找到了“string.h”编译错误的原因,在文件“ndk/sources/cxx stl/gnu libstdc++/4.9/bits/basic_string.h”中,以下语句返回false(_GLIBCXX_USE_C99未定义):

据我所知,这些限制是由Android仿生libc引起的

我有什么办法来解决这个问题

我已经尝试使用CrystaX NDK,但它只解决了我的“string.h”问题,我更愿意找到一个更标准的解决方案

使用一个非Android专用的ARM交叉编译器怎么样


谢谢。

我终于找到了解决这个问题的办法

首先,android NDK提供的gnu libstdc++完全支持“future.h”方法的使用,我只是错过了一些允许使用它的内容,我的错

接下来,我深入研究了我的库,发现真正导致编译错误的唯一方法是std::to_string。 因此,我决定简单地用以下内容覆盖它:

#if __ANDROID__

namespace std {
  #ifndef to_string
  inline string to_string(int _Val)
  {    // convert int to string
      char _Buf[256];
      sprintf(_Buf, "%d", _Val);
      return (string(_Buf));
  }
  #endif
}

#endif
我想,如果有其他一些不受支持的C++11方法,也可以重写它们。

我已经在小组中回复了您,但它今天的工作非常滞后,所以我的答案仍然没有出现在那里。关于-你能说得更详细些吗?阻止它的使用应该没有问题,所以这要么是您的错误,要么是CrystaX NDK中的错误。如果是bug,我们很乐意修复它,所以请让我知道到底出了什么问题。顺便说一句,你可以使用我们的文件票据,我们将尝试尽快解决问题。
#if __ANDROID__

namespace std {
  #ifndef to_string
  inline string to_string(int _Val)
  {    // convert int to string
      char _Buf[256];
      sprintf(_Buf, "%d", _Val);
      return (string(_Buf));
  }
  #endif
}

#endif