1

DBI モジュールを使用して Oracle に接続するには、 /oracle/v10.2.0/lib を LD_LIBRARY_PATH に追加する必要があります。

perl スクリプトを実行する前にシェルで LD_LIBRARY_PATH を設定すると、すべて問題ありません。

しかし、スクリプトからは機能しません:

BEGIN {
  $ENV{'LD_LIBRARY_PATH'}='/oracle/v10.2.0/lib';
}
use DBI;

スクリプトを実行すると、次のエラーが表示されます。

install_driver(Oracle) が失敗しました: モジュール DBD::Oracle の '/usr/apps/perl5/site_perl/5.8.8/i686-linux/auto/DBD/Oracle/Oracle.so' をロードできません: libclntsh.so.10.1 : 共有オブジェクト ファイルを開けません: No such file or directory at /usr/apps/perl5/5.8.8/i686-linux/DynaLoader.pm line 230. at (eval 3) line 3 Compilation failed in require at (eval 3) 3 行目。おそらく、必要な共有ライブラリまたは dll が /var/tmp/getTraceDB.pl 23 行目の期待される場所にインストールされていない可能性があります

4

2 に答える 2

5
BEGIN {
$ENV{'LD_LIBRARY_PATH'}.='/oracle/v10.2.0/lib';
exec($^X, $0, @ARGV);
}
use DBI;

適切な説明については、実行時リンカーと LD_LIBRARY_PATHを参照してください。

于 2012-03-16T11:43:33.567 に答える
0

はるかに良いのはLD_LIBRARY_PATH、あなた.profileまたは同様のものに設定したことです。ELFローダーの起動時に表示される必要があります。これは、スクリプトのブロックは言うまでもなく/usr/bin/perl、実行される前でも表示されます。BEGINこのexec()トリックは、パスを追加する必要がある場合にバイナリ全体を再起動することで機能しますが、環境内に常に存在する方がよいでしょう。

于 2012-03-19T18:14:10.173 に答える