[FreeBSD-users-jp 96322] Re: amd64でi386の同名ライブラリがロードできない

内藤 祐一郎 naito.yuichiro @ gmail.com
2018年 10月 9日 (火) 11:42:28 UTC


内藤です。

恐らく perl ライブラリのコンパイル時(厳密にはリンカオプションとして)に
 -rpath=/usr/loca/lib が指定されており
該当の perl ライブラリにその値が埋め込まれていたので、
そちらを優先して /usr/local/lib/libpq.so.5 を探そうとしているんだと思います。

rtld のロジック的には rpath の指定により /usr/local/lib の下から libpq.so を検索して
ファイルが存在しているから見つかったとしてパス検索を終了したけれども、
実際には 32bit ライブラリではないので読めなかったんだろうと思います。

/etc/libmap32.conf でマッピングし直すか、
ports/packages の chrpath を使って rpath を書き換えれば動くのではないでしょうか?
#書き換える際にはバックアップをお忘れなく。

なお、rpath 具体的な値は readelf -d <ファイル名> で確認してみてください。

あと蛇足ですが、 32bit ライブラリの読み込みパスを指定するには
LD_32_LIBRARY_PATH を指定するのが正しいです。
今回の場合は rpath が優先されますので恐らく無意味でしょうけど・・・。

> 2018/10/08 15:15、zen-freebsd-ml @ suzuki.que.ne.jpのメール:
> 
> 鈴木@葛飾区です。
> 
> FreeBSD11.2(amd64)をインストールして、その上で古いマシンからi386のプロ
> グラムやライブラリをコピーして動かそうとしているのですが、妙な現象で悩
> んでいます。
> 
> 古い32bitのライブラリは /usr/local/lib32/10.4 にコピーしてあります。
> また、rc.confで
> ldconfig32_paths="/usr/local/lib32/10.4 /usr/lib32 /usr/lib32/compat"
> のように
> 
> perl5.8(i386)のたとえばPostgresSQLのモジュールですが
> 
> # ldd32 /usr/local/lib/perl5/site_perl/5.8.9/mach/auto/DBD/Pg/Pg.so
> /usr/local/lib/perl5/site_perl/5.8.9/mach/auto/DBD/Pg/Pg.so:
>        libpq.so.5 => not found (0)
>        libm.so.5 => /usr/lib32/libm.so.5 (0x2862e000)
>        libc.so.7 => /usr/lib32/libc.so.7 (0x28072000)
> 
> のようにlibpq.so.5がnot foundになってしまいます。
> もちろん /usr/local/lib32/10.4/libpq.so.5 は存在します。
> 
> どうも様子がおかしいのは libpq.so.5 はamd64のための
> /usr/local/lib/libpq.so.5 も存在していて、/usr/local/lib に同名の64bit
> 用ライブラリがあるとダメなのですが、/usr/local/lib/libpq.so.5 を
> /usr/lib に移動すると不思議なことに
> 
> # ldd32 /usr/local/lib/perl5/site_perl/5.8.9/mach/auto/DBD/Pg/Pg.so
> /usr/local/lib/perl5/site_perl/5.8.9/mach/auto/DBD/Pg/Pg.so:
>        libpq.so.5 => /usr/local/lib32/10.4/libpq.so.5 (0x2862e000)
>        libm.so.5 => /usr/lib32/libm.so.5 (0x28656000)
>        libc.so.7 => /usr/lib32/libc.so.7 (0x28072000)
>        libthr.so.3 => /usr/lib32/libthr.so.3 (0x28684000)
>        libintl.so.8 => not found (0)
>        libssl.so.7 => /usr/local/lib32/compat/libssl.so.7 (0x286a7000)
>        libcrypto.so.7 => /usr/local/lib32/compat/libcrypto.so.7 (0x28704000)
> 
> のようにlibpq.so.5はokになります。
> (libintl.so.8が新たにnot foundになりますが、これも同名ライブラリが
> 64bit/32bitにあります)
> ※amd64のプログラムの方も問題ありません。
> 
> 32bit用ライブラリと同名のファイルが /usr/lib に存在するとokで
> /usr/local/lib以下に存在するとダメな理由があるのでしょうか??
> 
> 11.2でpkg/portsからインストールしたライブラリを/usr/libに移せば動きそ
> うではあるのですが、メンテナンス性が悪くなるためできれば避けたいです。
> 
> 宜しくお願いいたします。
> ---
> すずき
> _______________________________________________
> freebsd-users-jp @ freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-users-jp
> To unsubscribe, send any mail to "freebsd-users-jp-unsubscribe @ freebsd.org"

-- 
内藤 祐一郎
naito.yuichiro @ gmail.com





freebsd-users-jp メーリングリストの案内