我的项目使用两个不同的C++编译器:g++和nvcc(CUDA编译器)。 我注意到,从nvcc对象文件中抛出的异常在g++对象文件中没有被捕获。
在同一台机器上,C++异常是否应该二进制兼容? 是什么原因导致了这种行为?
try { kernel_= new cuda:: Kernel(); }
catch (...) { kernel_= NULL; }
// nvcc object
cuda:: Kernel:: Kernel () {
...
if (! impl_) throw;
}
其他的似乎都可以运行(C++对象、运算符)。老实说,我不太了解异常处理,所以上面的代码可能有错误。