non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

WindowsでDLLを作ろうとしてmrb_context_runの歴史を調べた

おはようございます。ここ数日夕方になると熱が上がる次男、昨日は夕方も熱も上がらず、汗かいて寝て、今朝も熱が上がらなかったので、おそらく復活かと思います。kjunichiです。

背景

mruby-juliaなるmrubyからはJulia(PyCall経由でPythonも)を呼べ、JuliaからはmrubyのAPIにアクセスできるmrbgemを作ってます。

今年は、Windows環境がメインな環境であれこれ開発進めようとしていて、その際にmruby-sharedlibなるmrbgemを利用して、libmruby.a相当の mruby.dllを作ろうとしたら、defファイルのシンボル「mrb_context_run」が存在しないとうエラー。

mrb_context_runの歴史

1.0.0

mrb_context_runはmruby v1.0.0ではありました。

mrb_value mrb_context_run(mrb_state*, struct RProc*, mrb_value, unsigned int);

1.1.0

MRB_API mrb_value mrb_context_run(mrb_state*, struct RProc*, mrb_value, unsigned int);

1.2.0

MRB_API mrb_value mrb_context_run(mrb_state*, struct RProc*, mrb_value, unsigned int);

current

#define mrb_context_run(m,p,s,k) mrb_vm_run((m),(p),(s),(k))

現在のmasterはこのように、mrb_vm_runを呼び出すマクロとして定義されています。 mruby-sharedlibでDLLを生成しようとしてdefファイルのシンボルが見つからないというエラーの 原因はこれでした。

github.com

まとめ

どうやら、現在のリリース版までは、存在しているようです。 単純にmruby-sharedlibにこのAPIを削除したプルリクを送るのは待った方がいいかもでした。

関連記事

11年前の記事

4年前の記事

3年前の記事

2年前の記事