0

我想在 python 中使用共享库中的一些函数。从 python 文档中,我知道 ctypes 是一个不错的选择。但是这样的库有一些未定义的符号,我应该将它链接到另一个共享库以获取符号。

在 g++ 中,很简单:g++ main.cpp -la -lb。我需要的函数在 liba.so 中,而 liba.so 有一些未定义的函数,可以在 libb.so 中解决。

但是如何在 ctypes 中做到这一点?ctypes.cdll.LoadLibrary('liba.so') 说有一些未定义的符号,如何告诉ctypes找到libb.so?因为 ldd liba.so 没有显示到 libb.so 的链接。

示例:我想在 gsl 中使用一些函数。在 g++ 中:

g++ main.cpp -lgsl -lgslcblas

并且 ldd libgsl.so 没有显示到 libgslcblas 的链接

在蟒蛇中:

ctypes.cdll.LoadLibrary('libgsl.so')

如何告诉 ctypes 找到 libgslcblas?

如果我使用 scalapack,也会发生同样的问题。我使用 ubuntu 16.04

4

1 回答 1

1

这个旧答案告诉应用mode=ctypes.RTLD_GLOBAL,即在这种情况下

import ctypes

dll1 = ctypes.CDLL('libgslcblas.so', mode=ctypes.RTLD_GLOBAL)
dll2 = ctypes.CDLL('libgsl.so')
于 2016-09-12T07:48:33.487 回答