From owner-freebsd-users-jp@freebsd.org Wed Oct 10 12:30:14 2018 Return-Path: Delivered-To: freebsd-users-jp@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D624010D21E1 for ; Wed, 10 Oct 2018 12:30:13 +0000 (UTC) (envelope-from zen-freebsd-ml@suzuki.que.ne.jp) Received: from mgate.inetd.co.jp (mgate.inetd.co.jp [210.129.88.236]) by mx1.freebsd.org (Postfix) with ESMTP id 44AF57DD33 for ; Wed, 10 Oct 2018 12:30:12 +0000 (UTC) (envelope-from zen-freebsd-ml@suzuki.que.ne.jp) Received: from mgate.inetd.co.jp (localhost [127.0.0.1]) by kirishima.m.inetd.co.jp (Postfix) with ESMTP id 7967F1B6E6 for ; Wed, 10 Oct 2018 21:30:10 +0900 (JST) Received: from localhost (kaga.x.inetd.co.jp [192.168.10.10]) by kirishima.m.inetd.co.jp (Postfix) with ESMTP id 724B81B6DC for ; Wed, 10 Oct 2018 21:30:10 +0900 (JST) Date: Wed, 10 Oct 2018 21:30:10 +0900 (JST) Message-Id: <20181010.213010.643539900384899551.inetd@x.inetd.co.jp> To: freebsd-users-jp@freebsd.org From: zen-freebsd-ml@suzuki.que.ne.jp In-Reply-To: References: <20181009.234625.990482796376591703.inetd@x.inetd.co.jp> X-Mailer: Mew version 6.7 on Emacs 24.4 / Mule 6.0 (HANACHIRUSATO) Mime-Version: 1.0 Content-Type: Text/Plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Subject: [FreeBSD-users-jp 96325] Re: =?iso-2022-jp?b?YW1kNjQbJEIkRxsoQmkzODYbJEIkTkYxTD4laSUkGyhC?= =?iso-2022-jp?b?GyRCJVYlaSVqJCwlbSE8JUkkRyQtJEokJBsoQg==?= X-BeenThere: freebsd-users-jp@freebsd.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: Discussion relevant to FreeBSD communities in Japan List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Oct 2018 12:30:14 -0000 内藤 様 鈴木@葛飾区です。 > 私も同じ認識でいましたが、どうやら DT_RUNPATH が共有ライブラリ内にあると、 > DT_RPATH は使われないので、LD_32_LIBRARY_PATH が優先されるようです。 > rtld(1) のマニュアルに優先順として書かれていました。 > > ので、最初に私が DT_RPATH を見ているからだと言っていたのが誤りで > DT_RUNPATH を見ていたからが正しいようです。 なるほど。読み方が浅かったようです。 いろいろありがとうございました。 とりあず、これまでのまとめてとしてはこんな感じでしょうか。 ・プログラムやライブラリ(.so)にRPATHが指定されている場合は、ldconfig による指定よりもRPATHで(プログラムのリンク時に)指定されている /usr/local/lib などが優先される。 ・この場合、/usr/local/lib32/compatなど32bit用としてldconfig(rc.confの ldconfig32_paths) で指定したディレクトリに32bit用のライブラリを配置 しても、同じ名前の64bit用ライブラリ(libpq.so.5など)が/usr/local/lib に存在すると、プログラム実行時やldd実行時には32bit用ではなく64bitの ライブラリを先に見つけてしまい、実行エラーになる。 ・プログラムでRPATHが設定されていてもDT_RUNPATHがさらに設定されている 場合、もしくはLD_LIBRARY_PATH_RPATH にyY1のいずれかが設定されている 場合は、LD_32_LIBRARY_PATHで32bitライブラリのディレクトリを設定して おけば32bitのライブラリを正しくリンクしてくれる。 (私が試した限りでは、ほとんどがLD_32_LIBRARY_PATHでokでした) /etc/login.confに以下の設定を追加してLD_32_LIBRARY_PATHを設定 default:\ :setenv=LD_32_LIBRARY_PATH=/usr/lib32\c/usr/local/lib32/10.4\c/usr/local/lib32/compat:\ 〜以下省略〜 ※ LD_32_LIBRARY_PATHで複数のディレクトリを指定する場合は:で接合する が、login.confでは \c に置き換える必要あり。 ・LD_32_LIBRARY_PATHが効かない場合は /etc/libmap32.conf でライブラリの マッピングを行う。 (書き方の例) # /usr/local/ruby18/bin/rubyに適用 [/usr/local/ruby18/bin/ruby] libxml2.so.2 /usr/local/lib32/10.4/libxml2.so.2 # /usr/local/ruby18ディレクトリ以下のすべてのプログラムに適用 [/usr/local/ruby18] libxml2.so.2 /usr/local/lib32/10.4/libxml2.so.2 libpq.so.5 /usr/local/lib32/10.4/libpq.so.5 libintl.so.8 /usr/local/lib32/10.4/libintl.so.8 # リマップするファイルをディレクトリだけ指定してできれば良いが、 # これはダメだった。 [/usr/local/ruby18] /usr/loca/lib/ /usr/local/lib32/10.4/ /usr/loca/lib/* /usr/local/lib32/10.4/* /etc/libmap32.confではライブラリファイルを列挙しないといけないような ので、たくさんある場合は LD_32_LIBRARY_PATH が簡単。 ・今回は試しませんでしたが、ports/packages の chrpath を使って rpath を書き換えるという方法もあり。 --- すずき