Domanda

Sto cercando di costruire cx_oracle per un'installazione di Python 2.7.2 e Oracle 11g ma il cx_oracle.so costruito non riesce a trovare libcnth.so.11.1 Quindi importando cx_oracle in Python fallisce.

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

Ho libclntsh.so.11.1 nella mia directory di installazione client Oracle:

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

e il cx_oracle Setup.py sta selezionando questa lib di off:

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

è qualcosa che ovviamente sbagliato con questa configurazione?

Grazie

Aggiornamento

My LD_Library_Path contiene la Directory Lib sopra con libclntsh.so.11.1

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

Questo non sembra fare alcuna differenza. Ricostruisci il file cx_oracle.so e mostra ancora libclntsh.so.11.1 => not found quando eseguo $ ldd cx_Oracle.so.

Python non riesce a caricare il modulo creato:

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
.

risolto

Il problema è stato correlato alla variabile di ambiente LD_Library_Path . A causa delle restrizioni sulla configurazione, sto lavorando con (corp env) ho dovuto costruire cx_oracle come un altro utente (account di sistema). I.e. Stavo correndo questo:

$ sudo -u username python27 setup.py build
.

Quindi anche se LD_Library_Path è stato impostato correttamente per me, la mia versione non è stata utilizzata quando il comando è stato eseguito come utente diverso. Sono stato in grado di costruire con successo spostando il codice sorgente in un luogo in cui avevo permessi e gestire la build come mio utente.

È stato utile?

Soluzione

Aggiungi /apps/oracle/client/11.2.0.1/home1/lib/ alla variabile di ambiente LD_LIBRARY_PATH Esegui il comando seguente nel terminale prima di eseguire Python o aggiungerlo al .bashrc

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

Altri suggerimenti

Sì.Hai dimenticato di dire al tuo strumento Cache Loader che ha bisogno di guardare in quella directory per le biblioteche.Aggiungi tale directory a /etc/ld.so.conf o un file simile ed esegui ldconfig.

Molti prodotti Oracle Installa Oraenv.Si imposterà, tra le altre variabili di ambiente, LD_LIBRARY_PATH, quindi considerare l'esecuzione di . oraenv invece di impostare manualmente l'ambiente.

Imposta il LD_RUN_Path .(Ld_run_path viene utilizzato dal linker per specificare dove cercare le librerie solo in fase di esecuzione.)

Ora Build 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
.

Non richiederà l'impostazione di LD_Library_Path durante l'importazione di cx_oracle.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top