glib から Crystal にいくつかの関数をバインドしようとしています。私はこれを行いましたが、動作します:
@[Link("glib-2.0")]
lib LibG
fun g_utf8_strup(str : UInt8*, len : UInt32) : UInt8*
fun g_utf8_strdown(str : UInt8*, len : UInt32) : UInt8*
end
ただし、メモリ リークが発生します。g_* 関数で作成されたオブジェクトはガベージ コレクションされません。
CrystalのBoehm GCでglibをうまくプレイさせることは可能ですか? PCREに触発されて、私はこれを試しました:
@[Link("glib-2.0")]
lib LibG
# These 2 functions work perfectly
fun g_utf8_strup(str : UInt8*, len : UInt32) : UInt8*
fun g_utf8_strdown(str : UInt8*, len : UInt32) : UInt8*
alias Malloc = LibC::SizeT -> Void*
alias Free = Void* ->
$g_malloc : Malloc
$g_free : Free
end
# At this point happens segmentation fault
LibG.g_malloc = ->GC.malloc(LibC::SizeT)
LibG.g_free = ->GC.free(Void*)
g_malloc
関数と関数をオーバーライド/再定義することを望んでいますg_free
。しかし、うまくいきません: セグメンテーション違反で失敗します。
glib を GC でプレイする方法はありますか? どういうわけか関連する質問を見つけましたが、役に立ちませんでした:ガベージコレクションとglib?
よろしくお願いします。