【问题标题】:Android NDK and functional (std::function) supportAndroid NDK 和功能 (std::function) 支持
【发布时间】:2015-11-07 15:14:06
【问题描述】:

我尝试在我的项目中使用 std::function,在这里和那里阅读 C++ 11 得到了很好的支持。然而,简单地使用 std::function 会使构建失败:

[armeabi] Compile++ thumb: MyAppNative <= MyAppNative.cpp
jni/MyAppNative.cpp: In function 'jint JNI_OnLoad(JavaVM*, void*)':
jni/MyAppNative.cpp:7:2: error: 'function' is not a member of 'std'
  std::function<void()> func;
  ^
jni/MyAppNative.cpp:7:24: error: 'func' was not declared in this scope
  std::function<void()> func;
                        ^
make: *** [obj/local/armeabi/objs/MyAppNative/MyAppNative.o] Error 1

我的问题是:应该支持 std::function 吗?我已经看到它在标题中有条件地定义,具体取决于_STLP_USE_BOOST_SUPPORT。这正常吗?如果有人有兴趣测试,我附上了一个示例项目。

http://www.filedropper.com/cpp11-functional-issue

干杯

【问题讨论】:

  • 您在构建时添加了-std=c++11 标志吗?使用哪个版本的 GCC?
  • 请参阅“如何设置运行时”中的 developer.android.com/ndk/guides/cpp-support.html
  • 是的,我确实添加了标志(您可以查看存档),我认为 GCC 版本是 4.8(至少在我更新到 r10e 进行测试之前)。 Christian> 谢谢,但这里没有提到 std::function 。我已经在使用 APP_STL := stlport_static(在我的可下载示例中),没有任何迹象表明此版本已降级。
  • @Brunni:为什么降级? AFAIK STLport 从未支持过 C++11。
  • Christian Hackl 是对的,你需要 gnustl_staticc++_static

标签: android c++ c++11 stl android-ndk


【解决方案1】:

您似乎正在使用的 STLport 从未支持 C++11。

请参阅 “如何设置运行时”中的 developer.android.com/ndk/guides/cpp-support.html 并选择不同的(gnustl_static 或 c++_static)。

【讨论】:

  • 最好复制粘贴如何配置运行时,而不是链接到外部大小。就像布鲁尼一样,他的回答帮助我更快。
  • 我的 Application.mk APP_OPTIM := 发布 APP_PLATFORM := android-14 APP_STL := c++_static APP_CFLAGS += -std=c++11 APP_CPPFLAGS += -frtti APP_CPPFLAGS += -fexceptions APP_CPPFLAGS += -DANDROID APP_CPPFLAGS += -std=gnu++0x LOCAL_CPP_FEATURES += exceptions APP_ABI := all APP_MODULES :=ndksampleapp NDK_TOOLCHAIN_VERSION := 4.9 但我仍然收到错误 'std::function' has not been declared
  • 是否像 stoi 我将能够通过 c++_static 并通过 gnustl_static 运行,因为如果我用 gnustl 替换它会为 stoi 哭泣。我是新来的。对某些人来说,这听起来很愚蠢或错误的问题。请帮忙。
【解决方案2】:

好的,感谢 Christian 和 Alex,答案确实是更改您的 Application.mk 以便它引用 gnustl_static。

APP_STL := gnustl_static

谢谢大家!

【讨论】:

  • 出于礼貌的不成文规则建议您让 Christian Hackl 发表他的评论作为答案。
  • 是的,我还不习惯,但显然感觉不对 :) 好吧,现在我将取消答案标记并在 Christian Hackl 发布该主题的答案时验证它!
  • @Brunni:没问题。我没有意识到我的评论实际上会对你有很大帮助,以至于你会认为它是一个答案:) 我现在已经把它变成了一个实际的答案。
猜你喜欢
  • 1970-01-01
  • 2014-05-11
  • 2013-10-19
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
相关资源
最近更新 更多