1
0

More than 3 years have passed since last update.

macOS で go-z3 を動かす (ビルドを通す)

Posted at

結論

go get -u github.com/mitchellh/go-z3 したあと,
$GOPATH/src/github.com/mitchellh/go-z3/Makefile を以下のように変更して make をします.

変更前
libz3.a: vender/z3
    cd vendor/z3 && python scripts/mk_make.py --staticlib
    cd vendor/z3/build && ${MAKE}
    cp vendor/z3/build/libz3.a .
変更後
libz3.a: vender/z3
    cd vendor/z3 && CXX=clang++ CC=clang python scripts/mk_make.py --staticlib
    cd vendor/z3/build && ${MAKE}
    cp vendor/z3/build/libz3.a .

経緯

macOSだと,go-z3 パッケージのインストールに失敗します.
go-z3 のREADMEでも「単純に go get するだけだと動かないぜ,自分でz3を make してくれよな!」みたいなことが書いてあって, git clone したあとに make を叩くだけでいいと書いてあるんですが,それだと(おそらく)あらゆるプラットフォームでビルドがコケます.
この原因は,本家z3のバージョンアップに伴って Z3_get_error_msg_exZ3_get_error_msg に改名されたり,cgoの仕様でCのBoolが見えなかったり,とかそのあたりです.

go get すると@mattnさんが修正したあとのコードが降ってくるっぽくて,Windowsだとビルドが通るっぽいです.しかし,macOSだと通りません.
この原因は,z3をビルドするときにgccを使っていることっぽいです(なんで?).ビルド時に CC=clang CXX=clang++ を設定するとビルドが通ります.

その他

Makefile の中でmacOSのときに CCCXX を設定するやつを書くとOSSコミットチャンスな気がするんですが, go-z3 のリポジトリはissueもずーっと放置されているので微妙です. go get で降ってくるコードがgithubのものと別物なのが不思議なんですが,どういうことなの?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0