Linuxbrewでgccが入っている状況で、外側にあるライブラリを使ってビルドしたかった
Linuxbrewを使っててちょっとはまることがあった。
- Linuxbrewが入っていて、Linuxbrewでgccその他ビルド関連ツールが入っている。
- Linuxbrew関係のパスが通っており、
gcc
などはLinuxbrew以下のものが使われる。 - Linuxbrewの外、
/usr/local/lib
にライブラリがある。 - 3のライブラリを使ってプログラムをビルドしたい。
具体的にはcmigemoを使って、migemoを有効にしてVimをビルドしようとした。
まず普通にやるとLinuxbrewのgcc(というかld)が、cmigemoを見つけてくれなかったようで、以下のようなエラーが出た。
/home/linuxbrew/.linuxbrew/bin/ld: cannot find -lmigemo
これは当たり前っちゃ当たり前。Linuxbrewのgcc
は同じくLinuxbrew内のld
使ってて、そっちにはcmigemoは登録されてなかったので。
ということでとりあえずLinuxbrewのld
からcmigemoというか、/usr/local/lib
内のライブラリを使えるようにしようとした。Linuxbrew内のld.so.conf
に/usr/local/lib
のパスを追加した上でldconfig
. これでldconfig -p
などすると、cmigemo
(というかlibmigemo.so
)が見えるようになった。
だがこれでもビルドできなかった。
未だに原因はよくわかってないんだけど、試行錯誤の上、最終的には以下のように対応して、とりあえずビルドできた。
- cmigemoを手動でLinuxbrew以下に入れた。
./configure --prefix=/home/linuxbrew/.linuxbrew/Cellar/cmigemo/0
みたいな感じ。 brew link cmigemo
でシンボリック・リンク作った。
ただこれは、Linuxbrew下に手動で突っ込むというのがイケてないのであまりやらない方がよさそう。もうちょっとマシな方法としては、
- そもそもcmigemoやVim用のFormula書いちゃって、ぜんぶLinuxbrew任せにできるようにする。
- そこまではしなくても、
brew diy
くらいは使っといた方がいいかも。ここの記事が参考になる。- https://qiita.com/z80oolong/items/dd3b8e5024c36df9b35b#brew-diy-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89
- ただ、この記事の著者自身が言ってるように、やっぱりFormula書けるなら書いた方がいいかと。
- Linuxbrewのパスは使わないときは通さずにしておいて、無関係のものはシステムのgccでビルドする。
- これするとLinuxbrewの意味があまりない気がするのがネック。
なおそもそも元ネタのHomebrewは、/usr/local
下にぜんぶ突っ込むっぽく、そのせいで問題になってないのではないかと思うんだけど、ではなんでLinuxbrewはそうしないのだろう。その辺がまずわかってない。
とりあえずLinuxbrewいろいろ難しい。日本語での情報少ないのもつらい。