- PR -

LD_RUN_PATH の追加方法

1
投稿者投稿内容
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-02-27 09:31
環境の差を埋めたく思い、質問させていただきます。

環境
旧:RedHat8.0
新:CentOS4.2

旧環境で make する際に LD_RUN_PATH="/usr/local/pgsql8.1.1/lib" と表示されるのに対し、
新環境で make する際には LD_RUN_PATH が表示されません。
その為に pgperl でのコンパイルに四苦八苦しています。

/etc/ld.so.conf には、
/usr/local/pgsql* 等の記述は両環境にありません。
env コマンドの結果も差違が見つかりませんでした。

この状況で次に探りを入れる場所のアドバイス等はありますか?
単純に /etc/ld.so.conf.d/ にパスを追加すれば解決すると思いますが、
スッキリしないのと PostgreSQL のバージョン毎に導入している(ことにより今後パスが変わる)ので、
旧環境ではどうやったのかな、と思いまして。

旧環境は試行錯誤しながら色々と試していたので、何故に LD_RUN_PATH が追加されているのか、
その手順を思い出せないでいます。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2006-02-27 10:59
PostgreSQL は configure 時に rpath を自動的に設定してくれるので、明示的に LD_RUN_PATH を設定する必要がなかったように思いますが。

あと、設定されていないのであれば、

export LD_RUN_PATH=/usr/local/pgsql8.1.1/lib

とすれば設定できます。ただし、LD_RUN_PATH の設定は ld で -rpath オプションを使用することによって上書きされてしまいますし、rpath を設定する必要がないものに対してまで rpath が設定されてしまいます。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-02-27 11:54
>あんどれさん

ありがとうございます。
-rpath の挙動の解りやすいご説明をありがとうございました。

もう少し詳しい状況をお話しすると、

旧環境で

> export PGSQL_HOME=/usr/local/pgsql/pgsql8.1.1
> export PATH=$PATH:$PGSQL_HOME/bin
> export PGLIB=$PGSQL_HOME/lib
> export PGDATA=$PGSQL_HOME/data
> export MANPATH=$MANPATH:$PGSQL_HOME/man
> export POSTGRES_HOME=/usr/local/pgsql/pgsql8.1.1
> export POSTGRES_LIB=/usr/local/pgsql/pgsql8.1.1/lib
> export POSTGRES_INCLUDE=/usr/local/pgsql/pgsql8.1.1/include
> cd /usr/local/src/Pg-2.1.1/
> perl Makefile.PL
> make

...
LD_RUN_PATH="/usr/local/pgsql/pgsql8.1.1/lib" gcc -shared -L/usr/local/lib Pg.o -o blib/arch/auto/Pg/Pg.so \
-L/usr/local/pgsql/pgsql8.1.1/lib -lpq \
...

> export PGDATABASE=test
> export PGUSER=postgres
> make test
...
test sequence finished.

となっているのが、
新環境で

※上記 export 済み。
> make
...
gcc -shared -L/usr/local/lib Pg.o -o blib/arch/auto/Pg/Pg.so -L/usr/local/pgsql/pgsql8.1.1/lib -lpq
...

> export PGDATABASE=test
> export PGUSER=postgres
> make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-Iblib/lib" "-Iblib/arch" test.pl
Can't load 'blib/arch/auto/Pg/Pg.so' for module Pg: libpq.so.4: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230.
at test.pl line 12
Compilation failed in require at test.pl line 12.
BEGIN failed--compilation aborted at test.pl line 12.
test failed
make: *** [test_dynamic] Error 255

と libpq.so.4 を見つけにいけてない状況になっています。
アドバイス頂いた通りに
export LD_RUN_PATH=/usr/local/pgsql8.1.1/lib
で、一時的に指定した後に無事に make test が通りました。

ただ、やはり疑問は残ったままなので・・・

RedHat の(明示的に指定していない状況で LD_RUN_PATH がある)環境が正常なのか、
CentOS の状況が正常なのか、どちらなのでしょうか?
#正常というよりも、より正しい状態?

また RedHat の場合は LD_RUN_PATH の表示があることからどこかで指定されていると
思いますが、どの(ファイル|設定)を見直せば良いでしょうか?
#環境変数は env で出力させて、指定が無いところまでは確認いたしました。

よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)