Go1.5がリリースされたので、mrubyの静的リンクを確認しましたので
語尾の修正やバージョンの書き換えなどです。
前回までのあらすじ
libmruby.aのリンク方法が「なんで?」って感じのコンパイルオプションの指定だったり(--Lmruby/lib -Wl,-lmruby
)、エラーを握りつぶしたりして何とかリンクしたnocd5であったが…
Go 1.5で解決されるたかも!
Go | 1.5 | 32bit |
mruby | 71f2975 | 32bit |
gcc | 4.9.2(TDM) | 32bit |
OS | Windows8.1 | 64bit |
※ Goのリポジトリ最新でもちゃんとリンクできること確認しました
(たんにgit checkout go1.5
しわすれただけ)
上記の組み合わせで、以下の普通のソースコードがビルドできました!
mruby_static_link/main.go
package main
// #cgo CFLAGS: -II:/FreeSpace/C/mruby/include
// #cgo LDFLAGS: -LI:/FreeSpace/C/mruby/build/host/lib -lmruby
// #include <windows.h>
// #include <mruby.h>
// #include <mruby/compile.h>
import "C"
import "unsafe"
func main() {
mrb := C.mrb_open()
defer C.mrb_close(mrb)
cxt := C.mrbc_context_new(mrb)
defer C.mrbc_context_free(mrb, cxt)
mrb_code0 := C.CString("puts 'Hello World ' + 'From mruby.'; m = 3")
defer C.free(unsafe.Pointer(mrb_code0))
mrb_code1 := C.CString("puts 'hypot(m, m+1) = ' + Math.hypot(m,m+1).to_s")
defer C.free(unsafe.Pointer(mrb_code1))
C.mrb_load_string_cxt(mrb, mrb_code0, cxt)
C.mrb_load_string_cxt(mrb, mrb_code1, cxt)
}
これはGo1.5では「Golangのcgoはwindowsでstatic-linkが上手く扱えないらしい」という問題が解決されましたるかも!