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')