Linuxbrewでgccが入っている状況で、外側にあるライブラリを使ってビルドしたかった

Linuxbrewを使っててちょっとはまることがあった。

  1. Linuxbrewが入っていて、Linuxbrewでgccその他ビルド関連ツールが入っている。
  2. Linuxbrew関係のパスが通っており、gccなどはLinuxbrew以下のものが使われる。
  3. Linuxbrewの外、/usr/local/libにライブラリがある。
  4. 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)が見えるようになった。

だがこれでもビルドできなかった。

未だに原因はよくわかってないんだけど、試行錯誤の上、最終的には以下のように対応して、とりあえずビルドできた。

  1. cmigemoを手動でLinuxbrew以下に入れた。./configure --prefix=/home/linuxbrew/.linuxbrew/Cellar/cmigemo/0みたいな感じ。
  2. brew link cmigemoでシンボリック・リンク作った。

ただこれは、Linuxbrew下に手動で突っ込むというのがイケてないのであまりやらない方がよさそう。もうちょっとマシな方法としては、

  • そもそもcmigemoやVim用のFormula書いちゃって、ぜんぶLinuxbrew任せにできるようにする。
  • そこまではしなくても、brew diyくらいは使っといた方がいいかも。ここの記事が参考になる。
  • Linuxbrewのパスは使わないときは通さずにしておいて、無関係のものはシステムのgccでビルドする。
    • これするとLinuxbrewの意味があまりない気がするのがネック。

なおそもそも元ネタのHomebrewは、/usr/local下にぜんぶ突っ込むっぽく、そのせいで問題になってないのではないかと思うんだけど、ではなんでLinuxbrewはそうしないのだろう。その辺がまずわかってない。

とりあえずLinuxbrewいろいろ難しい。日本語での情報少ないのもつらい。