빌딩 cx_Oracle 문제 - libclntsh.so .11.1 => 찾을 수 없음
Python 2.7.2 및 Oracle 11g 설치를 위해 cx_Oracle을 빌드하려고 하는데 빌드된 cx_Oracle.그래서 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 에서 이 libdir를 픽업합니다.
/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에는 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
.
많은 오라클 제품이 orenv를 설치합니다.다른 환경 변수들 중에서, 그것은 다음과 같은 것들을 설정할 것입니다.LD_LIBRARY_PATH
그러니 달리는 것을 고려해보세요.. oraenv
수동으로 환경을 설정하는 대신
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를 설정할 필요가 없습니다.
다른 사람들이 제가 잘못한 일로 시간을 낭비하지 않도록 여기에 이것을 추가하는 것입니다.
따라서 오라클 불변 클라이언트를 설치한 후 cx_ORACLE을 다시 설치하거나 설치하지 않았는지 확인해야 합니다. 사용하기 전에 시간을 낭비했고 매력적으로 작동했습니다.설정은 cx_ORACle8 및 오라클 클라이언트 18.5였습니다.또한 python 스크립트를 그대로 실행하기 전에 매번 ld 라이브러리 경로를 내보내야 합니다(18.5).
언급URL : https://stackoverflow.com/questions/11654090/issue-building-cx-oracle-libclntsh-so-11-1-not-found
'programing' 카테고리의 다른 글
프록시 뒤에서 루비 보석을 업데이트하는 방법(ISA-NTLM) (0) | 2023.06.25 |
---|---|
작업은 Excel 시트를 업데이트할 때 업데이트 가능한 쿼리를 사용해야 합니다. (0) | 2023.06.20 |
Oracle - ORA-01489: 문자열 연결 결과가 너무 깁니다. (0) | 2023.06.20 |
중첩된 Git 저장소? (0) | 2023.06.20 |
문자 오라클 뒤에 문자열을 가져오는 방법 (0) | 2023.06.20 |