libsqlite3
をPythonの特別なバージョンに置き換えたいと思います。 特別なバージョンのlibsqlite3.so.0 /path/to/libsqlite3.so.0
があり、LD_LIBRARY_PATH
と設定されています。 しかし、pythonの内部はそれをロードしません。libsqlite3.soをPythonに読み込む
私がチェックし、次気づい:
import sqlite3
負荷パイソンのオリジナル/usr/lib/python2.7/sqlite/__init__.py
とdbapi2.py
を。dbapi2.py
_sqlite
のインポート/usr/lib/python2.7//lib-dynload/_sqlite3.so
を示します。_sqlite3.so
は、LD_LIBRARY_PATH
にもかかわらず、常に/usr/lib/i386-linux-gnu/libsqlite3.so.0
をロードします。libpthread.so.0
〜/path/to/libpthread.so.0
をコピーすると、_sqlite3.so
がロードされます。したがって、/path/to/libpthread.so.0
がロードされていますが、/path/to/libsqlite3.so.0
がロードされていません。
は、私は(唯一の非特権許可を得て)/usr/lib/i386-linux-gnu/libsqlite3.so.0
を交換せずに、/path/to/libsqlite3.so.0
、特別なバージョンをロードする方法を知りたいです。
ありがとう、それは動作しますが、私はLD_PRELOADを使用する必要がありますか? LD_LIBRARY_PATHを設定すると、libpthread.so.0の代わりに動作しますが、libsqlite3.so.0を置き換えません。私はこの事実に悩まされている。 2つのライブラリの違いは何ですか? –
libpthread.so.0はPython自体によって読み込まれ( '' ldd /usr/bin/python2.7'') '' libsqlite3.so.0は_sqlite.soによって読み込まれ、Pythonではdlopen()によって読み込まれます。 LD_LIBRARY_PATHがそのように動作しない理由はわかりません。おそらく_sqlite.soのrpathの原因でしょうか? – tito
これはrpathの原因で、dlopen()のマンページを調べると、優先順位が説明されています:1. rpath、2。LD_LIBRARY_PATH、3. runpath、... – tito