ptxas fatal : Cannot take address of function ‘_ZN8Material6SampleERK4RayRK8GVector3S5’

来源:互联网 发布:分布式数据库有哪些 编辑:程序博客网 时间:2024/06/14 20:57
    终于把困扰我好几天的问题解决了。

    原来是我的material类(父类)有个函数没有提供实现,导致了这个错误。

    我是一个个头文件排查出来的。还有就是,这个错误的提示很奇怪,就是后面Z开头的这一串。但是可以看出是和material有关的。所以,要耐心的排查错误。仔细的检查哪一个函数没有提供实现。最后我把父类里的那个没有提供实现的函数弄成了纯虚函数,搞定!问题解决。

    注意,当需要在cuda中使用很多的自定义类的时候,这些类的实现和声明都要放在同一个.h文件里,然后文件后缀名是不是.cuh倒不是很要紧。需要用global函数调用的函数,声明为__device__。还有一个就是,我的核函数之前一直没有运行,很奇怪,因为同样的代码在我师兄的windows上面结果就是正确的,很奇怪。解决办法是,我觉得可能是我的cuda8.0版本太高,gpu搞不动,然后我就卸载了cuda8.0,重新装了cuda7.5,其实还是不行,然后后面我用nvidia的nsight跑了一下,居然奇迹的好了,然后QT里面的代码也好了,无语!!!还是不知道是什么原因。

0 0
原创粉丝点击