C++11 使用C++;11带有适用于Android的Cocos2d-x

C++11 使用C++;11带有适用于Android的Cocos2d-x,c++11,android-ndk,cocos2d-x,C++11,Android Ndk,Cocos2d X,我的问题的开始是,我试图在Cocos2d-x中使用正则表达式。不管出于什么原因,std::tr1::regex不能与C++98一起使用,所以我尝试将std::regex与C++11一起使用(以及其他一些C++11特性)。这是与iOS一起工作,因为在XCODE中改变C++的版本非常容易,但是我在Android上工作有很多麻烦。p> 我将NDK的r8e版本与gnustl_静态库一起使用。我将LOCAL\u CPPFLAGS+=-std=c++11设置为clang(除了默认设置之外)。不管使用什么工具

我的问题的开始是,我试图在Cocos2d-x中使用正则表达式。不管出于什么原因,std::tr1::regex不能与C++98一起使用,所以我尝试将std::regex与C++11一起使用(以及其他一些C++11特性)。这是与iOS一起工作,因为在XCODE中改变C++的版本非常容易,但是我在Android上工作有很多麻烦。p> 我将NDK的r8e版本与gnustl_静态库一起使用。我将
LOCAL\u CPPFLAGS+=-std=c++11
设置为clang(除了默认设置之外)。不管使用什么工具链,我现在都可以编译代码了,但当我试图创建一个std::regex对象时,它仍然会崩溃
std::regex reg1(“[a-z][0-3]*”)看起来有些人能够让C++ 11与Android NDK扩展库(不是“最小C++运行时支持库”)一起工作,但我无法理解。我已经阅读了很多想法,并且尝试了其中的大部分,我看到了一些线索,比如NDK文档中CHANGES.html中的以下内容:

    Patched GCC 4.4.3/4.6/4.7 libstdc++ to work with Clang in C++11
我不知道这一切是如何结合在一起的,所以有人能给我指出正确的方向吗?我在这里遗漏了什么?

在您的android.mk add中

LOCAL_CPPFLAGS += -std=gnu++0x
在您的android.mk中添加

LOCAL_CPPFLAGS += -std=gnu++0x

打开Application.mk文件并在末尾添加以下两行:

APP_CPPFLAGS += -std=c++11
NDK_TOOLCHAIN_VERSION=4.7
注意:正如您提到的,您正在使用NDK的r8e版本,您需要的工具链版本是4.7。如果是r9,可以将其设置为4.8


希望这有帮助。

打开Application.mk文件,并在末尾添加以下两行:

APP_CPPFLAGS += -std=c++11
NDK_TOOLCHAIN_VERSION=4.7
注意:正如您提到的,您正在使用NDK的r8e版本,您需要的工具链版本是4.7。如果是r9,可以将其设置为4.8


希望这有帮助。

或者,如果您不局限于使用c++的std::regex,您可以尝试使用标准c:regcomp()和regexec()

下面是一个示例实现():

#包括
int匹配(常量字符*字符串,常量字符*模式)
{
智力状态;
正则表达式;
if(regcomp(&re,pattern,REG_EXTENDED | REG_NOSUB)!=0){
返回(0);/*报告错误*/
}
status=regexec(&re,string,(size\u t)0,NULL,0);
regfree(&re);
如果(状态!=0){
返回(0);/*报告错误*/
}
申报表(1);
}

或者,如果不局限于使用c++的std::regex,可以尝试使用标准c:regcomp()和regexec()

下面是一个示例实现():

#包括
int匹配(常量字符*字符串,常量字符*模式)
{
智力状态;
正则表达式;
if(regcomp(&re,pattern,REG_EXTENDED | REG_NOSUB)!=0){
返回(0);/*报告错误*/
}
status=regexec(&re,string,(size\u t)0,NULL,0);
regfree(&re);
如果(状态!=0){
返回(0);/*报告错误*/
}
申报表(1);
}

刚试过,也没用。和以前一样,它成功地编译了,但是当它到达代码的regex部分时崩溃了。只是尝试了一下,它也不起作用。和以前一样,它编译成功,但在到达CodeThank的regex部分时崩溃了!你把我从这个错误中救了出来。“'override'没有命名类型”谢谢!你把我从这个错误中救了出来。“'override'未命名类型”