質問

Python 2.7.2およびOracle 11gのインストールのためのCX_ORACLEを構築しようとしていますが、Built CX_ORACLE.SOはlibclntsh.so.11.1を見つけることができません。

/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
.

この設定で明らかに何か問題?

ありがとう

更新

my ld_library_path libclntsh.so.11.1 で上記のlibディレクトリを含みます。

$ 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 が正しく設定されていても、コマンドが別のユーザーとして実行されたときに私のバージョンは使用されませんでした。ソースコードを正常に構築することができました。

役に立ちましたか?

解決

/apps/oracle/client/11.2.0.1/home1/lib/環境変数にLD_LIBRARY_PATHを追加する Pythonを実行する前に、ターミナルの下のコマンドを実行するか、それを.bashrc に追加してください。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/oracle/client/11.2.0.1/home1/lib/
.

他のヒント

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

多くのOracle ProductsはORAENVをインストールします。それは、他の環境変数の中で一般的な環境変数の中で設定されるので、環境を手動で設定する代わりにLD_LIBRARY_PATHを実行することを検討します。

ld_run_path を設定します。(LD_RUN_PATHはリンカによって使用され、実行時にのみライブラリを探す場所を指定します。)

今CX_ORACLEを構築します。

/mypath/cx_Oracle-5.1.1]$ export LD_RUN_PATH="/apps/oracle/client/11.2.0.1/home1/lib"
/mypath/cx_Oracle-5.1.1]$ python2.7 setup.py build
.

cx_oracleをインポートしながらld_library_pathの設定は不要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top