0

Python で共有ライブラリのいくつかの関数を使用したいと考えています。python doc から、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 に答える