Динамический FFI в Go - PullRequest
       19

Динамический FFI в Go

9 голосов
/ 09 ноября 2010

Возможно ли динамически загрузить чужую библиотеку C (dll) и вызвать ее функции в Go?

Я знаю, что есть cgo, который используется для статической привязки к функциям C, но мне интересен динамический способ.

1 Ответ

6 голосов
/ 09 ноября 2010

Краткий ответ: нет. (по крайней мере, не с gc, однако gccgo можно связать с gcc, поэтому это возможно)

Средний ответ: Однако вы можете статически связать, скажем, libffi или libdl, а затем использовать it для динамической загрузки других библиотек.

Длинный ответ: вы можете написать пакеты go в C и ASM, используя компилятор и ассемблер go инструментов go (см., Например, src / pkg / runtime). Таким образом, вы можете написать FFI на C или ASM в качестве пакета go.

Редактировать: из комментариев ниже (также CW сейчас)

В качестве альтернативы, это можно сделать с помощью пакетов syscall и unsafe (легко в Windows, но я думаю, что это будет сложнее в Linux и недалеко от третьего решения выше).

http://code.google.com/p/go/wiki/CallingWindowsDLLs

...