【问题标题】:std::string operations (i.e. stol, stoi) not found NDK8d未找到 std::string 操作(即 stol、stoi) NDK8d
【发布时间】:2026-01-18 11:20:06
【问题描述】:

我尝试使用支持 c++11 的 ndk r8d 设置我的第一个 android 项目。 一些 c+11 机制工作正常(即 lambda 表达式),但是当我尝试 要使用新的字符串操作之一,编译失败(错误:“stol”不是“std”的成员)。这是我的 项目设置:

应用程序.mk

APP_MODULES := MyLib   

APP_CPPFLAGS := -std=gnu++0x  
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
APP_CPPFLAGS += -DDEBUG   

APP_ABI := armeabi-v7a
APP_PLATFORM:=android-14                      

APP_STL := gnustl_static
APP_GNUSTL_CPP_FEATURES := rtti exceptions

NDK_TOOLCHAIN_VERSION=4.7

这些功能真的不起作用吗?

【问题讨论】:

  • 您是否尝试过在 tr1、tr2 或 ext 等不同的命名空间中进行搜索?
  • 如果我尝试使用命名空间 std::tr1、std::tr2 和 std::ext,我会收到未声明的失败消息。

标签: android android-ndk


【解决方案1】:

好像在another thread回复了。

你不能使用这些功能的原因是根深蒂固的,不幸的是目前无法解决。

在 GNU STL 中,这些函数的实现以某种方式依赖于 c99(_GLIBCXX_USE_C99 宏),Android 不使用它

根本原因似乎是 armeabi-v7a 平台上的 GNU stdlibc++ 中禁用了 C99 功能使用,因为 Bionic libc 不支持复杂的数学(Android 上的标准 C 库是 Bionic) .

【讨论】:

    【解决方案2】:

    添加:

    APP_STL := c++_static

    到 Application.mk 为我解决了这个问题(使用 gcc 4.8.4)。

    来自 Google Groups post 的 Daniel Tavares 的解决方案。

    【讨论】: