python ctypes link 多个共享库示例 gsl gslcblas
python ctypes link multiple shared library with example gsl gslcblas
我想使用 python 中共享库中的一些函数。从 python 文档中,我知道 ctypes 是一个不错的选择。但是这样的库有一些未定义的符号,我应该 link 它到另一个共享库来获取符号。
在 g++ 中,很简单:g++ main.cpp -la -lb。我需要的函数在liba.so中,liba.so有一些未定义的函数可以在libb.so中解决。
但是如何在 ctypes 中做到这一点?
ctypes.cdll.LoadLibrary('liba.so') 说有一些未定义的符号,怎么告诉ctypes去找libb.so?因为 ldd liba.so 没有显示 link 到 libb.so.
例子:我想使用gsl中的一些函数。在 g++ 中:
g++ main.cpp -lgsl -lgslcblas
和 ldd libgsl.so 不向 libgslcblas
显示 link
在python中:
ctypes.cdll.LoadLibrary('libgsl.so')
如何告诉 ctypes 找到 libgslcblas?
使用scalapack也会出现同样的问题。我用 ubuntu 16.04
这个old answer告诉应用mode=ctypes.RTLD_GLOBAL
,即在这种情况下
import ctypes
dll1 = ctypes.CDLL('libgslcblas.so', mode=ctypes.RTLD_GLOBAL)
dll2 = ctypes.CDLL('libgsl.so')
我想使用 python 中共享库中的一些函数。从 python 文档中,我知道 ctypes 是一个不错的选择。但是这样的库有一些未定义的符号,我应该 link 它到另一个共享库来获取符号。
在 g++ 中,很简单:g++ main.cpp -la -lb。我需要的函数在liba.so中,liba.so有一些未定义的函数可以在libb.so中解决。
但是如何在 ctypes 中做到这一点? ctypes.cdll.LoadLibrary('liba.so') 说有一些未定义的符号,怎么告诉ctypes去找libb.so?因为 ldd liba.so 没有显示 link 到 libb.so.
例子:我想使用gsl中的一些函数。在 g++ 中:
g++ main.cpp -lgsl -lgslcblas
和 ldd libgsl.so 不向 libgslcblas
显示 link在python中:
ctypes.cdll.LoadLibrary('libgsl.so')
如何告诉 ctypes 找到 libgslcblas?
使用scalapack也会出现同样的问题。我用 ubuntu 16.04
这个old answer告诉应用mode=ctypes.RTLD_GLOBAL
,即在这种情况下
import ctypes
dll1 = ctypes.CDLL('libgslcblas.so', mode=ctypes.RTLD_GLOBAL)
dll2 = ctypes.CDLL('libgsl.so')