如何用android ndk和eclipse编译c++11代码

How to compile c++11 code with android ndk and eclipse?

本文关键字:编译 c++11 代码 eclipse 何用 android ndk      更新时间:2023-10-16

我使用android NDK r8d和eclipse Juno。我正在尝试编译c++代码,其中使用c++ 11的东西,如mutex, lock_guard, shared_ptr等在一个原生android项目在eclipse。

我得到如下错误:

"error: 'shared_ptr'不是'std'的成员"

"fatal error: mutex: No such file or directory"

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

我将"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下工作,那就太好了。

关于你的第一个问题:

  1. 进入项目>属性> C/c++通用/路径和符号

  2. 在"Includes"选项卡中,添加适当的目录,例如:/android-ndk-r8d/资源/cxx-stl/gnu-libstdc + +/4.7/包括

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

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

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

我发现在启动eclipse之前导出一个环境变量NDK_TOOLCHAIN_VERSION=4.8。

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