prosource

libclntsh.so .11.1: 공유 개체 파일을 열 수 없습니다.

probook 2023. 6. 22. 21:58
반응형

libclntsh.so .11.1: 공유 개체 파일을 열 수 없습니다.

리눅스에서 itrontab으로 작업을 예약하고 싶은데 작업이 파이썬으로 작성되어 있어서 가져와야 합니다.cx_Oracle모듈, 그래서 나는 내보냅니다.ORACLE_HOME그리고.LD_LIBRARY_PATH.vmdk_profile에서는 다음 오류가 발생합니다.

libclntsh.so .11.1: 공유 개체 파일을 열 수 없습니다.

다음과 같이 셸에서 명령을 실행하여 작업을 실행해도 괜찮으므로,

python a.py  # ok

iprontab의 작업을 Python 스크립트를 호출하는 셸 스크립트로 변경하는데 예외가 발생했습니까?

# the shell script scheduled in icrontab
#! bash 
python a.py    

어떻게 해야 하는지 좀 도와주시겠어요?

지정할 수 있습니다.PATH그리고 또한ORACLE_HOME그리고.LD_LIBRARY_PATH할 수 있도록cron(1)이진 파일을 찾는 위치를 알고 있습니다.
여기에서 "5 Crontab 환경"을 읽으십시오.

립은 다음 위치에 있습니다./u01/app/oracle/product/11.2.0/xe/lib(Oracle XE의 경우) 또는 이와 유사합니다.

이 경로를 다음에 추가해야 합니다./etc/ld.so.conf또는 이 파일이 포함 위치만 표시하는 경우(예: 의 별도 파일)/etc/ld.so.conf.d디렉토리

Oracle.confin이 있습니다./etc/ld.so.conf.d경로가 있는 파일 하나만.다른 것은 없어요.

물론 마지막 단계로 ldconfig를 실행하는 것을 잊지 마십시오.

Cron은 작업을 실행할 때 사용자의 프로필을 로드하지 않으므로 셸 스크립트에 명시적으로 프로필을 포함해야 합니다.

문서화 예제

libclntsh.so 에 문제가 있는 경우 libclntsh.so 에 대한 심볼릭 링크를 생성해야 합니다./usr/lib/oracle/11.2/client64/lib로./usr/lib

저는 지난 주말에 cx_Oracle을 사용해야 할 때 같은 문제를 겪었습니다.libclntsh.so 이 있는 $ORACLE_HOME/lib 디렉토리를 포함하도록 LD_LIBRARY_PATH 변수를 수정하는 데 많은 시간을 들인 후, 모든 Oracle xlibx.so 라이브러리에서 /lib/xlibx.so 로 심볼 링크를 생성하여 문제를 해결했습니다.이것은 확실히 "가장 깨끗한" 솔루션은 아니지만, 큰 문제를 일으키지 않고 작동할 가능성이 높습니다.

 cd $ORACLE_HOME/lib
 for f in `ls ./*.so*`; do;
   sudo ln -s $ORACLE_HOME/lib/$f /lib/$f 
 done

그 후 cx_Oracle은 매력적으로 작동했습니다.

이 게시물은 Postgre와 유사한 문제를 해결하는 데 도움이 되었습니다.SQL 데이터베이스를 사용하여 Oracle로 연결oracle_fdw.

설치했습니다.oracle_fdw하지만 내가 노력했을 때CREATE EXTENSION oracle_fdw;받았습니다error could not load library libclntsh.so.11.1: cannot open shared object file: No such file or directory.

확인했습니다$ORACLE_HOME,$PATH그리고.$LD_LIBRARY_PATH.

Linux Shared Library에 Oracle Shared Library를 배치한 후에만 작동했습니다.

echo /opt/instantclient_11_2 > oracle.conf
ldconfig

나는 종속성을 설치해야 했습니다.

oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64

스크립트를 실행하기 전에 Oracle 경로 변수를 전달하십시오.
펄과 마찬가지로 스크립트 시작 부분에 아래를 추가할 수 있습니다.

BEGIN {
   my $ORACLE_HOME     = "/usr/lib/oracle/11.2/client64";
   my $LD_LIBRARY_PATH = "$ORACLE_HOME/lib";
   if ($ENV{ORACLE_HOME} ne $ORACLE_HOME
   || $ENV{LD_LIBRARY_PATH} ne $LD_LIBRARY_PATH
   ) {
      $ENV{ORACLE_HOME}     = "/usr/lib/oracle/11.2/client64";
      $ENV{LD_LIBRARY_PATH} = "$ORACLE_HOME/lib";
      exec { $^X } $^X, $0, @ARGV;
   }
}

항상 이 문제가 있습니다. 아래 코드를 실행하여 해결할 수 있습니다. 내보내기 LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH

enter image description here

OBS: 항상 사용하기 때문에 구성 파일에 저장한 코드입니다. 행운을 빕니다.

설치 관리자 미디어 데이터베이스/stage/ext/lib에서 $ORACLE_HOME/lib로 모든 라이브러리 파일을 복사하여 문제를 해결했습니다.

다른 가장 은 업데이트하는 입니다.cx_Oracle최신 버전(6+)으로 변경합니다.은 이버은필않다니습지가 하지 않습니다.LD_LIBRARY_PATH일체의

아마도 당신은 해야 할 필요가 있습니다.sudo된 계정으로 :) 관정련된 환 등 계 으 로 록 에 설 정 경 :)

언급URL : https://stackoverflow.com/questions/2708317/libclntsh-so-11-1-cannot-open-shared-object-file

반응형