2

Python バージョン 2.6.5 と 2.7.1 の両方を備えたシステムを使用していますが、一方の LoadLibrary は機能し、もう一方は機能しないことに気付きました。

Python 2.7.1 (r271:86832, Nov 30 2010, 10:03:07)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import cdll
>>> cdll.LoadLibrary("./mylib.so")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/ctypes/__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "/usr/local/lib/python2.7/ctypes/__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: ./mylib.so: undefined symbol: compress2

そして2.6.5土地の作業中:

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import cdll
>>> cdll.LoadLibrary("./mylib.so")
<CDLL './mylib.so', handle 98bbd88 at b785c94c>

Python 2.7.1が機能しない理由を理解する良い方法を知っている人はいますか?

4

1 に答える 1

1

なんらかの理由で、Python ctypes はライブラリの依存関係について非常に厄介です。なぜ 2.6.5 が上記で動作していたのかはまだわかりませんが、次の手順を実行すると修正されます。

mylib.so をコンパイルするとき、明示的に zlib ライブラリを指定またはリンクする必要がありました。「compress2」はzlibライブラリからのものなので、次のようにして実行できます。

g++ 何とか何とか mylib.so 何とか何とか -lz

-lz は zlib ライブラリにリンクし、「ldd mylib.so」を実行すると表示されます。これにより修正され、「LoadLibrary」が失敗しなくなります。

于 2010-12-10T20:43:02.090 に答える