GoogleNaCl是否支持C++11编译器的异常
Does Google NaCl support exceptions with a C++ 11 compiler?
Google NaCL至少有两个C++编译器:一个是非常旧的gcc版本,另一个是最近的clang版本。gcc版本不支持C++11,所以我宁愿不使用它。非常新的clang编译器生成中间代码,然后在浏览器中编译,或者将其编译为原生代码。我尝试了第一种方法:让Chrome在浏览器中编译它。问题是:例外不起作用,我需要它们。我查过了,但我真的看不懂这张票的细则。剩下的第二种方法是:在部署之前将代码编译为本机。。。问题:那么我可以使用异常吗?还是我应该放弃任何希望?
(…在Go和这之后,我的印象是谷歌工程师真的很讨厌例外…(
在最新版本的PNaCl工具链中,您可以通过在链接时传递选项--pnacl-exceptions=sjlj
来启用C++异常处理。由此产生的pexe将适用于任何支持PNaCl的Chrome版本(Chrome 31及以上版本(。
此选项将try/catch块转换为在内部使用setjmp((。表演可能不太好。我们计划稍后添加ABI对零成本异常处理的稳定支持,以提高性能。
此选项最终应在Chrome 33的NaCl SDK中提供。在此之前,它可以在Canary版本的NaCl SDK中使用。
您链接到的票证的本质是
-
您不能在PNaCl中使用C++异常,也就是说,如果您计划部署为
.pexe
文件(LLVM位代码(,则不能使用C++异常 -
如果您提供标志
--pnacl-allow-exceptions
(用于pnacl-Clang和pnacl-translate(,并在部署前编译和翻译为一组.nexe
二进制文件,则可以在基于Clang的工具链中使用C++异常。
在C++中,以及几乎任何其他语言中,应该谨慎使用异常,正如您在上面看到的,一些样式指南建议根本不要使用它们。
-
如果您计划部署.nee.,则可以将C++异常与PNaCl工具链一起使用
链接.pexe时需要将
--pnacl-allow-exceptions
传递给pnacl clang,将.pexe转换为.nee.时需要将其传递给pnacl translate如果不将此选项传递给pnacl translate,则会出现有关
_Unwind_*
符号未解析的错误。如果在链接.pexe时不传递此选项,则引发异常将导致程序退出。 -
在PNaCl的第一个版本中,当浏览器翻译.pexe时,将不支持C++异常。如上所述,抛出异常将导致程序退出。但稍后的版本将支持C++异常。
- C/C++编译器通常会删除重复的库吗
- 如何在编译器方便的情况下在 C/C++ 中发布算术溢出异常
- 使用 noexcept 和编译器标志来关闭异常
- 标准库函数 abs() 在不同C++编译器上的异常行为
- 将异常编译器错误强制转换为void
- Clang编译器选项将异常规格LAX错误视为警告
- 编译器C++非常异常的行为
- 错误 C2248:无法访问在类中声明的私有成员,编译器行为异常
- 是否允许编译器优化异常引发
- Opengl in C++:编译器读取 glBindVertexArray 时未处理的异常
- 引发异常时出现编译器错误
- xcode 4.2苹果LLVM编译器3.0是否与c++异常完全兼容
- 异常、移动语义和优化:任由编译器摆布 (MSVC2010)?
- 捕获模板化异常时出现编译器错误
- GoogleNaCl是否支持C++11编译器的异常
- JIT编译器和异常处理
- Borland C++ 编译器在跨构造函数边界引发异常时不会撤消内存分配?
- C++编译器异常-StackTrace为空
- 显示变量消息的自定义异常,不同编译器中的行为不同
- 编译器构造 - 有没有办法在 c++ 中使用不会花费我 60k 的二进制大小的异常?