通过ctypes在python中加载共享库(cuda),无法动态加载

时间:2017-03-24 15:05:39

标签: python cuda shared-libraries ctypes

我已通过以下命令将我的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

我过去做过类似的脚本,从未遇到过这个错误。我很困惑为什么会出现此错误消息。

赞赏任何输入

1 个答案:

答案 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

可能就是你想要做的。