我想要测试NaCl和PNaCl(接下来,我将使用NaCL)和默认的SDK和Pepper_31。
https://developers.google.com/native-client/dev/
我尝试改编旧项目,但这个项目使用C ++ 11。我向CFLAGS添加了此选项-std = c ++ 11,但此选项无法识别。
cc1plus:错误:无法识别的命令行选项“-std = c ++ 11”
正常,NaCl支持C ++ 11,但也许我不明白这一章。
在使用带有NaCL的C ++ 11进行一些研究之后,一个解决方案用于CFLAGS这个选项-std = c ++ 0x -D__GXX_EXPERIMENTAL_CXX0X __ = 1.
但是C ++ 11不是完全支持的,我有很多错误(这段代码适用于GCC 4.7.2,-std = C ++ 11选项)。
我的问题是:
1)NaCl是否真的支持C ++ 11?
2)如果是,如何使用NaCl启用C ++ 11?
3)否则,这种支持将很快发布(可能是Pepper_32)?
4)你有别人解决了吗?
感谢您的关注。
编辑: 当我使用默认工具链编译-std = c ++ 0x -D__GXX_EXPERIMENTAL_CXX0X __ = 1作为选项时,会导致此错误:
src / GEP_PARSE / ParserCSV.cpp:在函数'void csvWriteFile(std :: vector,std :: allocator>,std :: allocator,std :: allocator>>&gt ;,std :: allocator,std)中:: allocator>,std :: allocator,std :: allocator>>>>>&,const std :: string&,char)':
src / GEP_PARSE / ParserCSV.cpp:16:错误:':'令牌之前的预期初始值设定项 src / GEP_PARSE / ParserCSV.cpp:24:错误:'}'令牌之前的预期primary-expression src / GEP_PARSE / ParserCSV.cpp:24:错误:预期';'在'}'标记之前 src / GEP_PARSE / ParserCSV.cpp:24:错误:'}'令牌之前的预期primary-expression src / GEP_PARSE / ParserCSV.cpp:24:错误:预期')'在'}'令牌之前 src / GEP_PARSE / ParserCSV.cpp:24:错误:'}'令牌之前的预期primary-expression src / GEP_PARSE / ParserCSV.cpp:24:错误:预期';'在'}'标记之前
Makefile:24:目标'newlib / Release / src / GEP_PARSE / ParserCSV_x86_32.o'的配方失败 make: * [newlib / Release / src / GEP_PARSE / ParserCSV_x86_32.o]错误1
代码来源: for(自动行:记录) { ... }
答案 0 :(得分:3)
正如您所发现的那样,x86 NaCl编译器太旧了,无法完全支持C ++ 11:
$ pwd
/home/binji/dev/testsdk/nacl_sdk/pepper_31/toolchain/linux_x86_newlib/x86_64-nacl/bin
$ ./gcc --version
gcc (GCC) 4.4.3 20130827 (Native Client r12067, Git Commit 46c2b9f0e51c734569cdd6956af695881814e7ed)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
您可以将其与此页面进行比较,以查看哪些功能缺失:http://gcc.gnu.org/projects/cxx0x.html
PNaCl编译器支持C ++ 11:https://developers.google.com/native-client/dev/reference/pnacl-c-cpp-language-support
您可以使用pnacl-translate工具将.pexe转换为特定于体系结构的.nexe。
请注意,目前PNaCl使用GCC的libstdc ++,而不是LLVM的libc ++,尽管这应该很快修复。请在此处查看最近的帖子:https://groups.google.com/d/msg/native-client-discuss/WxRAMOO_6iE/TJw6O9JtIUsJ
答案 1 :(得分:0)
使用SDK版本: pepper_49
添加更多信息以便进一步搜索用户&也可以回答这篇文章:
-std=gnu++11
(而不是CFLAGS
)添加-std=c++11
选项
(张华在上面的帖子中回答)道歉没有详尽地测试C ++ 11中的每个功能,我可以使用 auto ,基于范围的for-loop 和初始化列表使用此选项。
至于C ++ 11标准库,即使没有这个额外的选项,它的大多数也可以正常工作。但是,目前还不支持某些类/函数(例如 packaged_task , async , bind )。添加此选项应该有效。