2016-08-31 15 views
0

Pythonで共有ライブラリからいくつかの関数を使いたいと思います。 Pythonのドキュメントから、私はctypesが良い選択であることを知っています。しかし、そのようなライブラリには未定義のシンボルがいくつかあります。シンボルを取得するために別の共有ライブラリにリンクする必要があります。python ctypesリンクされた複数の共有ライブラリgsl gslcblas

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++ main.cpp -lgsl -lgslcblas 

とのLDD libgsl.soはPythonでlibgslcblas

へのリンクが表示されません。

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

libgslcblasを見つけるために、ctypesのを伝えるためにどのように?

scalapackを使用する場合も同じ問題が発生します。私はUbuntuの16.04

答えて

1

このold answer

import ctypes 

dll1 = ctypes.CDLL('libgslcblas.so', mode=ctypes.RTLD_GLOBAL) 
dll2 = ctypes.CDLL('libgsl.so') 
すなわち、この場合には、 mode=ctypes.RTLD_GLOBALを適用するように指示を使用します
関連する問題