我已通过以下命令将我的cuda脚本编译到共享库中:
nvcc --ptxas-options=-v --compiler-options '-fPIC' -o test_function.so mologram.cu
然后,在Python中:
import ctypes
from numpy.ctypeslib import ndpointer
lib = ctypes.cdll.LoadLibrary('./test_function.so')
引发以下错误消息:
OSError Traceback (most recent call last)
<ipython-input-12-02ce09d7f391> in <module>()
2 from numpy.ctypeslib import ndpointer
3
----> 4 lib = ctypes.cdll.LoadLibrary('./test_function.so')
/usr/lib/python2.7/ctypes/__init__.pyc in LoadLibrary(self, name)
438
439 def LoadLibrary(self, name):
--> 440 return self._dlltype(name)
441
442 cdll = LibraryLoader(CDLL)
/usr/lib/python2.7/ctypes/__init__.pyc in __init__(self, name, mode, handle, use_errno, use_last_error)
360
361 if handle is None:
--> 362 self._handle = _dlopen(self._name, mode)
363 else:
364 self._handle = handle
OSError: ./test_function.so: cannot dynamically load executable
我过去做过类似的脚本,从未遇到过这个错误。我很困惑为什么会出现此错误消息。
赞赏任何输入
答案 0 :(得分:1)
我已通过以下命令将我的cuda脚本编译成共享库
nvcc --ptxas-options=-v --compiler-options '-fPIC' -o test_function.so mologram.cu
但你还没有。这只会将mologram.cu
编译为目标文件。如果您查阅documentation,您将看到共享库编译和链接需要--shared
选项。所以
nvcc --ptxas-options=-v --compiler-options '-fPIC' --shared -o test_function.so mologram.cu
可能就是你想要做的。