2016-05-03 8 views
0

私はpythonモジュールcairocffiを使用しようとしています。私はx86-64でDebian(Stretch)を使うので、aptパッケージlibcairo2-devをインストールし、pipを使ってcairocffi pythonパッケージをインストールしました。これはすべてうまくいった。しかし、私はそれをインポートしようとすると、それはモジュールをロードするために失敗します。ldconfig -pが見つける/ usr/lib/x86_64-linux-gnuにPythonがライブラリを見つけません

$ python -c "import cairocffi; print('OK')" 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/cairocffi/__init__.py", line 46, in <module> 
    cairo = dlopen(ffi, 'cairo', 'cairo-2') 
    File "/usr/local/lib/python2.7/dist-packages/cairocffi/__init__.py", line 43, in dlopen 
    raise OSError("dlopen() failed to load a library: %s" % '/'.join(names)) 
OSError: dlopen() failed to load a library: cairo/cairo-2 

しかし、ldconfiglibcairo.so知っているん:

$ sudo ldconfig -p | grep cairo 
     libpangocairo-1.0.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 
     libpangocairo-1.0.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so 
     libcairo.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo.so.2 
     libcairo.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo.so 
     libcairo-script-interpreter.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-script-interpreter.so.2 
     libcairo-script-interpreter.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-script-interpreter.so 
     libcairo-gobject.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-gobject.so.2 
     libcairo-gobject.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-gobject.so 

を、私は修正LD_LIBRARY_PATHでのpythonを実行すると、それは動作します:私は、スケーラビリティと舞のために、このスクリプトを実行するように変更LD_LIBRARY_PATH上でのpythonを実行する必要がありますする必要はありません

$ LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu python -c "import cairocffi; print('OK')" 
OK 

しかし、私はなぜそれが明らかにダイナミックリンカが知っているライブラリをピックアップしていないのか理解できません。私は何が欠けていますか?

答えて

0

私の/usr/lib(これはlibcairoの依存関係です)には古いlibpixman.soが隠れていて、libcairoがインストールされたフォルダに新しいlibpixmanがありました。だからLD_LIBRARY_PATHがlibcairoの場所に設定されていれば、動作していた新しいlibpixmanを拾い上げ、それが設定されていなければ古いものを取り上げるでしょう。古いlibpixmanを/usr/libからすべて削除しました。

関連する問題