如何使用Android NDK和Eclipse编译C++11代码?

15
我正在使用android NDK r8d和eclipse Juno。我正在尝试在Eclipse中的本地Android项目中编译使用C ++ 11内容(如mutex,lock_guard,shared_ptr等)的C ++代码。
我遇到了错误,例如:
“error:'shared_ptr'不是'std'的成员”
“fatal error:mutex:没有这样的文件或目录”
我在这里看到了一个类似的问题。 它对他们有效,但那里的解释不完整,所以我无法使其工作。
我在Application.mk中添加了 "NDK_TOOLCHAIN_VERSION = 4.7",并在Android.mk文件中添加了 "LOCAL_CFLAGS + = -std = c ++ 11"。 仍然无法编译。
上面的链接中说:
“请确保标准库包含路径(例如/ android-ndk-r8d / sources / cxx-stl / gnu-libstdc ++ / 4.7 / include)在目标设置中。”
我应该在哪里插入它?
我还在eclipse IDE中收到错误(在编译之前)。 我知道我应该定义“__GXX_EXPERIMENTAL_CXX0X__”以解决它们,但我不知道该放在哪里。
因此,如果有人能发布一篇关于如何编译并让eclipse与C ++ 11一起工作的完整说明,那将是很好的。

阅读NDK文档,这是不可能的。 - Geoffroy
似乎他们已经解决了这个问题。 - DeathlessHorsie
你用什么编译器来编译C++代码? - naxchange
1
@naxchange 我正在使用Android NDK附带的工具链,我相信它是gcc/g++。正如我所写的,我将其设置为“NDK_TOOLCHAIN_VERSION=4.7”。这里有一个相关问题:(https://dev59.com/OGw15IYBdhLWcg3wcrdC)。 - DeathlessHorsie
2个回答

6
关于您的第一个问题: 1. 转到“项目”>“属性”>“C/C++常规/路径和符号”。 2. 在“包含”选项卡中,添加正确的目录,例如/android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.7/include。
关于您的第二个问题,我也在寻找答案。如何在Eclipse中定义GXX_EXPERIMENTAL_CXX0X宏还不清楚。 有人说应将其“添加为索引器的预定义宏”,但看起来我们都找不到实现它的方法... 我在其他地方读到,应将其添加到“C/C++常规/路径和符号/符号/GNU C++”中,但我在我的Indigo版本中找不到“符号/GNU C++”部分。

我使用的是Eclipse Juno,但我也没有“Symbols / GNU C++”部分。如果不定义“__GXX_EXPERIMENTAL_CXX0X__”,索引器将无法识别C++11的内容。你是否成功地使用NDK编译了你的代码? - DeathlessHorsie
是的,(C++11)代码在NDK下编译没有问题。问题只出现在Eclipse内部索引的层面上。 - Ariel Malka
2
针对在Eclipse Juno中修复索引器的问题,我在“https://dev59.com/F2ox5IYBdhLWcg3wLhei#15782177”上发布了一个解决方法。 - Shervin Emami

0

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

Eclipse使用ndk的默认工具链版本4.6,如果没有定义NDK_TOOLCHAIN_VERSION,则使用此版本的gcc不支持所有c++11的特性,如多线程等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接