ports更新時の依存関係の修復
chromium のバージョンをあげようとおもって、portsnap でportsを最新にしてみたら
下記のエラーがでて、gtk20 のところでコンパイルでエラーになってしまいました。
Shared object "libpcre.so.0" not found
どうも、libpcre のバージョンが上がっても、依存しているパッケージが再コンパイルされない
ことが原因みたいです。emacsも下記のエラーがでて起動しなくなっていました。
Shared object "libpcre.so.0" not found, required by "libgtk-x11-2.0.so.0"
この場合の対策方法は、2つだと思います。
1)/etc/libmap.conf を使って動的リンクを変更する
2)依存関係のあるパッケージを、全てコンパイルする
1) /etc/libmap.conf を作成し、下記のように記載する
sudo vi /etc/libmap.conf
libpcre.so.0 libpcre.so.1
emacs は起動するようになりました。
2)依存関係のあるパッケージを、全てコンパイルする
依存関係のあるライブラリを洗い出します
grep -n -e "libpcre.so.0" /usr/local/lib/*
多すぎる。。。
Binary file /usr/local/lib/libIDL-2.so matches Binary file /usr/local/lib/libIDL-2.so.0 matches Binary file /usr/local/lib/libORBit-2.so matches Binary file /usr/local/lib/libORBit-2.so.0 matches (中略) Binary file /usr/local/lib/libwnck-1.so.22 matches Binary file /usr/local/lib/libxklavier.so matches Binary file /usr/local/lib/libxklavier.so.12 matches Binary file /usr/local/lib/libxml++-2.6.so matches Binary file /usr/local/lib/libxml++-2.6.so.2 matches
すごい数ですが…
とりあえず、x11-toolkits/gtk20 に依存関係のあるライブラリをコンパイルしてみます。
> sudo portmaster -fR x11-toolkits/gtk20
-fR をつけることで、強制的に依存関係のあるportsも再コンパイルされます。
コンパイル完了後、依存関係のあるパッケージをみるt、gtkに依存関係のあるパッケージはなくなりましたがまだたくさんのこっていたので結局全コンパイルしました。
どのパッケージでインストールされたかは、以下のようにして確認できます。
> pkg_info -W /usr/local/lib/libxml++-2.6.so /usr/local/lib/libxml++-2.6.so was installed by package libxml++-2.34.2
以上です。