15

我正在使用 android NDK r8d 和 eclipse Juno。我正在尝试在 Eclipse 的原生 android 项目中编译使用 C++11 之类的 C++ 代码,如mutex, lock_guard,shared_ptr等。

我收到如下错误:

“错误:‘shared_ptr’不是‘std’的成员”

“致命错误:互斥锁:没有这样的文件或目录”

我在这里遇到了一个类似的问题。它似乎对他们有用,但那里的解释并不完整,所以我无法让它为我工作。

我添加"NDK_TOOLCHAIN_VERSION=4.7"Application.mk和文件中"LOCAL_CFLAGS += -std=c++11"Android.mk尽管如此,它仍然无法编译。

在上面的链接中它说:

“确保标准库包含路径(如 /android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.7/include)在目标设置中。”

我如何以及在哪里插入它?

我还在 eclipse IDE 中遇到错误(在源代码上,在编译之前)。我知道我应该定义"__GXX_EXPERIMENTAL_CXX0X__"来解决它们,但我只是不知道把它放在哪里。

因此,如果有人可以发布一个完整解释如何编译和使 eclipse 与 C++11 一起工作的答案,那就太好了。

4

2 回答 2

6

关于你的第一个问题:

  1. 转到项目 > 属性 > C/C++ 常规/路径和符号

  2. 在“包含”选项卡中,添加正确的目录,例如 /android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.7/include

关于你的第二个问题,我也在寻找答案。绝对不清楚如何在 Eclipse 中定义GXX_EXPERIMENTAL_CXX0X宏。

有人说它应该“作为预定义的宏添加到索引器”,但看起来我们都找不到实现它的方法......

我在其他地方读到它应该被添加到“C/C++ General / Paths and Symbols / Symbols / GNU C++”,但我在我的 Indigo 版本中找不到“Symbols / GNU C++”部分。

于 2013-03-11T11:12:44.827 回答
0

我发现在我启动 eclipse 之前导出一个环境变量 NDK_TOOLCHAIN_VERSION=4.8 可以解决这个问题。

Eclipse 使用 ndk 的默认工具链版本 4.6,如果没有定义 NDK_TOOLCHAIN_VERSION,并且 gcc 巫婆这个版本不支持所有 c++11 的未来如多线程等。

于 2015-05-23T14:35:03.520 回答