.so文件导致的算法运行失败

在调solo时一直出现mportError: /home/student1/wmydexiangmu/detectron2-master/detectron2/_C.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZN3c104cuda20getCurrentCUDAStreamEa问题,一开始我把注意力集中到最后面的问题,猜测是cuda与torch的版本问题(因为网上大家都是这么说的)这让我走了好久的弯路。
后来我注意到.so文件于是把ubuntu中的该文件与其他已经训练好的solo算法的.so文件的大小比较发现不同,说明问题出在了so文件上,而且如果把正确的so文件复制过来算法就可以运行成功了。这个so文件不是生成的而是项目里的,不知道为啥出了问题。
关于这个_C.cpython-37m-x86_64-linux-gnu.so文件做一下研究:.so文件是动态链接,可以直接运行的。直接运行是什么结果取决于so文件写的入口地址。
使用cython将py文件编译成so文件,可以封装保证安全性。将python文件打成so文件的目的就是为了保护源码。难以编辑。
makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。
可以找人家训练好的solo里的so文件替换自己的。

你可能感兴趣的:(python,cv,python)