28

Python 2.7.2 および Oracle 11g のインストール用に cx_Oracle をビルドしようとしていますが、ビルドされた cx_Oracle.so が libclntsh.so.11.1 を見つけることができないため、Python での cx_Oracle のインポートに失敗します。

/mypath/cx_Oracle-5.1.1/build/lib.linux-x86_64-2.7-11g]$ ldd cx_Oracle.so
    libclntsh.so.11.1 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae9be290000)
    libc.so.6 => /lib64/libc.so.6 (0x00002ae9be4ab000)
    /lib64/ld-linux-x86-64.so.2 (0x000000389b600000)

Oracle クライアントのインストール ディレクトリにlibclntsh.so.11.1があります。

/apps/oracle/client/11.2.0.1/home1/lib]$ ls -l libclntsh.so*
libclntsh.so -> /apps/oracle/client/11.2.0.1/home1/lib/libclntsh.so.11.1
libclntsh.so.11.1

そして、cx_Oracle setup.py はこの lib ディレクトリを選択しています:

/mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build
/apps/oracle/client/11.2.0.1/home1/
running build
running build_ext
building 'cx_Oracle' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/apps/oracle/client/11.2.0.1/home1/rdbms/demo -I/apps/oracle/client/11.2.0.1/home1/rdbms/public -I/apps/bweb/python-2.7.2/include/python2.7 -c cx_Oracle.c -o build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -DBUILD_VERSION=5.1.1
In file included from /apps/oracle/client/11.2.0.1/home1/rdbms/public/oci.h:3024,
                 from cx_Oracle.c:10:
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10788: warning: function declaration isn't a prototype
/apps/oracle/client/11.2.0.1/home1/rdbms/public/ociap.h:10794: warning: function declaration isn't a prototype
gcc -pthread -shared build/temp.linux-x86_64-2.7-11g/cx_Oracle.o -L/apps/oracle/client/11.2.0.1/home1/lib -lclntsh -o build/lib.linux-x86_64-2.7-11g/cx_Oracle.so

この設定で何か明らかに問題がありますか?

ありがとう

アップデート

私のLD_LIBRARY_PATHには、上記のlibディレクトリとlibclntsh.so.11.1が含まれています

$ echo $LD_LIBRARY_PATH
/apps/oracle/client/11.2.0.1/lib

これは何の違いもないようです。cx_Oracle.so ファイルを再構築しましたが、実行しても表示libclntsh.so.11.1 => not foundされます$ ldd cx_Oracle.so

Python がビルドされたモジュールの読み込みに失敗しました:

Python 2.7.2 (default, Jan 19 2012, 14:38:32)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory

解決した

この問題は、LD_LIBRARY_PATH環境変数に関連していました。私が使用しているセットアップ (corp env) の制限により、cx_Oracle を別のユーザー (システム アカウント) としてビルドする必要がありました。つまり、私はこれを実行していました:

$ sudo -u username python27 setup.py build

そのため、LD_LIBRARY_PATHが正しく設定されていても、コマンドが別のユーザーとして実行された場合、私のバージョンは使用されませんでした。権限のある場所にソース コードを移動し、自分のユーザーとしてビルドを実行することで、ビルドを成功させることができました。

4

4 に答える 4

28

環境変数に追加/apps/oracle/client/11.2.0.1/home1/lib/して、LD_LIBRARY_PATHpython を実行する前にターミナルで以下のコマンドを実行するか、.bashrc

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/oracle/client/11.2.0.1/home1/lib/
于 2012-07-25T16:27:09.927 に答える
1

はい。そのディレクトリでライブラリを探す必要があることをローダー キャッシュ ツールに伝えるのを忘れていました。/etc/ld.so.confそのディレクトリをまたは同様のファイルに追加して、 を実行しますldconfig

于 2012-07-25T16:15:06.583 に答える
0

多くのオラクル製品は oraenv をインストールします。他の環境変数とともに設定されるため、環境を手動で設定する代わりにLD_LIBRARY_PATH実行することを検討してください。. oraenv

于 2014-08-13T15:04:12.103 に答える