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 "[email protected]"
*-これはちょっとクレイジーですが、TIMTOWTDI:
eval {
use DBD::Oracle foo bar baz; …
};
if ([email protected] =~ /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\[email protected]\n";
exec { $0 } $0 => @ARGV;
}