LoginSignup
11
11

More than 5 years have passed since last update.

Go言語@Windowsでmrubyを静的リンクする。Go 1.5

Last updated at Posted at 2015-06-06

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が上手く扱えないらしい」という問題が解決されましたるかも

11
11
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
11
11