programing

빌딩 cx_Oracle 문제 - libclntsh.so .11.1 => 찾을 수 없음

abcjava 2023. 6. 20. 21:19
반응형

빌딩 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

반응형