%ENV가 작동하지 않으며 공유 라이브러리를 사용할 수 없습니다.
사용할 수 없습니다.%ENV
내 Perl 스크립트에서 Oracle libs를 사용하기 위해 var.
BEGIN {
$ORACLE_HOME = "/usr/lib/oracle/10.2.0.3/client64";
$LD_LIBRARY_PATH = "$ORACLE_HOME/lib";
$ORACLE_SID="prod";
$ENV{ORACLE_SID}=$ORACLE_SID;
$ENV{ORACLE_HOME}= $ORACLE_HOME;
$ENV{LD_LIBRARY_PATH}= $LD_LIBRARY_PATH;
};
인쇄하는 경우$ENV{'ORACLE_HOME'}
그리고.$ENV{'LD_LIBRARY_PATH'}
모든 것이 괜찮아 보이지만 스크립트를 실행할 때 오류가 발생합니다.
install_driver(Oracle) 실패:모듈 DBD에 대해 '/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so '을(를) 로드할 수 없습니다.:Oracle: libclntsh.so .10.1: 공유 개체 파일을 열 수 없습니다./usr/lib64/ perl5/DynaLoader.pm line 200. at (eval 3) line 3에서 해당 파일이나 디렉토리가 없습니다. (eval 3) line 3에서 컴파일이 실패했습니다.필요한 공유 라이브러리 또는 dll이 지속성이 예상되는 곳에 설치되어 있지 않을 수 있습니다.펄 라인 22
하는 올바른 방법은 에서 Perl envars를 입니다.%ENV
ORACLE_HOME
그리고.LD_LIBRARY_PATH
해()export LD_LIBRARY_PATH=...
올바르게 작동합니다.조언 좀 해주세요.
LD_LIBRARY_PATH
프로그램이 시작되기 전에 환경 변수를 설정해야 합니다.perl
그 자체가 적재되어 있습니다.BEGIN{}
시작하는 새 프로그램에는 영향을 미치지만 공유 라이브러리 로드에는 영향을 미치지 않습니다(DBD를 사용한 적은 없지만).:Oracle) Oracle을 로드하고 있습니다..so
이미 때문에 에는"라는다를 바꾸기에는 "LD_LIBRARY_PATH
../lib/ld.so
(또는 그 정도) 시작하기 시작합니다.perl
쯤 , , BEGIN{}
실행, 이미 설정되어 있습니다.
스크립트를 자체 후속 버전으로 다시 실행해 볼 수도 있습니다*. 하지만 짧은 셸 스크립트가 가장 간단한 해결책이 될 것은 거의 확실합니다.
#!/bin/sh
export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client64/lib
export ORACLE_SID=prod
exec /usr/local/bin/your-db-program "$@"
*- 이건 좀 미친 짓이겠지만, TIMTOWDI:
eval {
use DBD::Oracle foo bar baz; …
};
if ($@ =~ /install_driver\(Oracle\) failed/) {
$ENV{LD_LIBRARY_PATH} .= ':/usr/lib/oracle/10.2.0.3/client64/lib';
$ENV{ORACLE_SID} = 'prod';
warn "Restarting with LD_LIBRARY_PATH reset:\n\n$@\n";
exec { $0 } $0 => @ARGV;
}
했습니다를 할 때 하기 위해 몇 했습니다.%ENV
:
use strict;
use warnings;
use feature qw(say);
BEGIN {
my $foo = "bar-bar";
$ENV{FOO} = "$foo";
}
system qq(/bin/echo printing out \$FOO);
출력:
printing out bar-bar
제가 예상했던 대로입니다
그 다음에 시도해 봤습니다.
use strict;
use warnings;
use feature qw(say);
BEGIN {
my $foo = "bar-bar";
$ENV{FOO} = "$foo";
}
system qq(./test.sh);
그리고 만들어냈습니다.test.sh
다음과 같은 프로그램:
#! /bin/sh
echo This is what I got: $FOO;
이 내 Perl 입니다를 .test.sh
$FOO
Perl 스크립트에 설정된 환경 변수. 중인입니다.test.pl
알겠습니다.
This is what I got bar-bar
이는 Perl이 환경 변수를 설정하고 있을 뿐만 아니라 해당 변수를 내보내고 있으므로 셸 스크립트가 환경 변수에 액세스할 수 있음을 보여줍니다.
하여 두 할 수 .LD_LIBRARY_PATH
그리고.ORACLE_HOME
사용하기 전에 설정하고 있습니다. 일이 합니다만을 걸 될 거예요,다.%ENV
.
여기서 한 가지 결론이 나옵니다.환경 설정LD_LIBRARY_PATH
그리고.ORACLE_HOME
Perl 스크립트가 시작될 때까지 너무 늦게 발생할 수 있습니다.나는 운영체제가 다음을 조사할 것이라고 생각합니다.LD_LIBRARY_PATH
펄이 시작되기 전에이것을 발견했어요.LD_LIBRARY_PATH
:
LD_LIBRARY_PATH는 런타임 공유 라이브러리 로더(ld.so )에 공유 라이브러리를 검색할 때 찾을 추가 디렉토리 집합을 제공하도록 설정한 환경 변수입니다.여러 디렉토리를 나열하고 콜론(:)으로 구분할 수 있습니다.이 목록은 지정된 실행 파일에 대한 컴파일된 로더 경로 및 시스템 기본 로더 경로의 기존 목록 앞에 추가됩니다.
그렇게,LD_LIBRARY_PATH
을 위한 것입니다.ld.so
런타임 공유 라이브러리 로더, 경우ld.so
이미 로드되었습니다, 변경 중입니다.LD_LIBRARY_PATH
아무것도 하지 않을 겁니다.
펄 몽크스에 대해서도 비슷한 논의를 발견했습니다.누군가가 다시 도망치는 것을 발견한 것이 효과가 있는 것 같습니다.
한 가지 해결책은 /etc/ld.so .conf를 수정하는 것입니다.
CentOS/RHEL 6.4에서는 다음을 사용하여 etc/ld.so .conf.d/ oracle를 만들 수 있습니다.
/oracle/sw/product/11.2.0/dbhome_1/lib
물론 ORACLE_HOME에 맞게 수정합니다.
그다음달리기
ldconfig -v
당신은 그것을 넣을 수 있습니다.export
명령어를 편집 권한이 있어야 하는 유닉스 셸의 시작 스크립트에 입력합니다.이렇게 하면 새 셸을 시작할 때마다 환경 변수가 설정되고 Oracle을 사용하는 모든 스크립트와 프로그램이 이를 선택합니다.
저도 방금 비슷한 일을 겪었습니다.Oracle 환경이 다른 사용자가 요청하기 전에 먼저 설치되었는지 확인해야 했습니다.확인합니다.BEGIN
블록은 다른 "사용" 문 앞에 있습니다.제 경우에는 Apache의 httpd.conf 파일에서 무언가가 호출되고 있었기 때문에 패키지 대신 환경을 설정해야 했습니다.
언급URL : https://stackoverflow.com/questions/8657005/env-doesnt-work-and-i-cannot-use-shared-library
'programing' 카테고리의 다른 글
날짜가 과거 자바스크립트인지 확인 (0) | 2023.09.19 |
---|---|
word press 403 오류 ( duplic레이터 설치) (0) | 2023.09.19 |
파워셸을 최신 개정판으로 업데이트 (0) | 2023.09.19 |
wordpress visual composer 속성 확인란을 처음 선택하는 방법 (0) | 2023.09.19 |
고유한 구속조건이 존재하는지 확인하고 액상을 사용하여 떨어트립니다. (0) | 2023.09.19 |