2010-11-09 8 views
8

Ist es möglich, dynamisch laden ausländische C-Bibliothek (Dll) und rufen Sie ihre Funktionen in Go?Dynamische FFI in Go

Ich weiß, es gibt cgo, die verwendet wird, um statisch an C-Funktionen zu binden, aber ich bin in dynamischen Weg interessiert.

Antwort

6

Kurze Antwort: Nein. (Zumindest nicht mit gc, gccgo gcc verknüpfbar ist jedoch, so dass es möglich sein könnte)

Medium Antwort: Sie können jedoch statisch binden, sagen wir, libffi oder libdl und verwenden Sie dann es dynamisch anderen Bibliotheken zu laden.

Lange Antwort: Sie können go-Pakete in C und ASM mit dem go toolchains C-Compiler und Assembler schreiben (siehe zB src/pkg/runtime). Sie könnten also ein FFI in C oder ASM als Go-Paket schreiben.

Edit: Aus den Kommentaren unten (auch CW jetzt) ​​

Alternativ kann es die syscall und unsafe Pakete getan werden (einfach in den Fenstern, aber ich glaube, es wäre schwieriger in Linux und nicht weit weg sein von die dritte Lösung oben).

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

+0

Ich mag mittlere Antwort, vielleicht werde ich das versuchen. Wie für eine lange Antwort, ist es schade, dass so etwas nicht Teil der Standard-Pakete ist. – Marko

+0

Ist es nicht einfach mit http://golang.org/pkg/syscall/ LoadLibrary getan? Ich erinnere mich, dass jemand Code geschrieben hatte, mit dem man problemlos jede Funktion innerhalb einer DLL dynamisch von Go aufrufen konnte, aber ich kann dieses Beispiel nicht mehr finden. – jcao219

+0

@ jcao219 Ich hatte das nicht gesehen, aber es ist nur Windows. Und Sie brauchen immer noch eine Möglichkeit, zwischen den Bibliotheksroutinen zu rufen und Go – cthom06