LilyPondのセグメンテーション・フォールト 8月1日, 2020


64bit用LilyPondがセグメンテーション・フォールトを吐くなら、libguile関連ライブラリーを入れ替えてみる

楽譜はSibeliusで清書している。ただ、ちょっと数小節必要な場合、簡単に印字してくれるLilyPondも大変好きだ。テキストファイルを用意すれば、TeXのように画像を生成する不思議さに引かれてもいた。そう、Catalinaになる前はね。そうです、64bit障壁ができてからは動かなくなって久しいわけです。

残念でしょうがなくて、あの膨大な依存ファイルを数日かけて集めてmakeしてみたこともあって、今でもmacには他で用いることがありそうもないあれこれの小さなプログラムやライブラリを貯めこんでいる。でも、次から次へと更なる依存関係を言われることに根負けしてコンパイルをあきらめ、もうこの際Homebrewだか、MacPortsだかを頼るよりしょうがないかなと思い始めていた。macOSに既存のファイルまで重ねてinstallして自分の環境を作るパッケージは好みではなく、また元来があれこれ試してconfigureやmakeなどで無事に動くプログラムが組み上がっていくプロセスが好きなことから、それらパッケージのお世話にはなっていないのだ。

さて、それで今日発見した。Marnenという人物がdarwin-64bit用バイナリーを公表していたのだ。本当に今頃になって発見した。しかもLilyPondの本家にリンクがあるのに気づかずにいたわけだ。 macOS 10.15用の非公式の64ビット アプリケーション バンドル

しかし残念にも、入手して立ち上げるとわが環境では「Segmentation fault」で止まってしまう。

$ lilypond --verbose desktop/test.ly

表示されるエラーを確認した。これで"Segmentation fault"が出てくる起動ログの一部が見える

解決方法を探して数時間、NetでのMarnenの発言を発見しそれを追うと、彼が他のユーザーのエラー状況を確認する言葉の中で、lib/guile18について述べているのを読んだ。 LilyPond.app/.../lib/guile18 の不具合の可能性を考えているように見えた。それに吐いているエラーからすると、ライブラリーコンパイルの問題にも思えると、勝手で根拠ない推測をし、試しに「大事そうなlibguile*(供給ファイルには18個ある)」を、自分でguile-1.8.8をコンパイルした時にできていた '/usr/local/lib/libguile*(24個あった)' に入れ替えてみた。

ライブラリの場所は、 LilyPond.app/contents/Resources/lib/libguile*
lib/guile18が関連するわけではないようだ。事情は不分明で、libguile18.dylibは、lib/guile18には置かれずlib/libguile18.dylibとなっている。とにかく単純なことに上記でOKだった。

desktop$ lilypond test.ly

test.pdfが無事に作成されたし、以前作成したファイルで試しても無事に出力される。OKだった。Marnenさんどうもありがとう。私と類似環境でこのエラーを経験している方は、試してみる価値があると思う。ご自分の責任で。