Heim >Backend-Entwicklung >Golang >Wie kann ich Go-Code aus einem C-Programm heraus aufrufen?
Seit der Veröffentlichung von Go 1.5 ist die Möglichkeit entstanden, Go mit bestehenden C-Projekten zu integrieren. In diesem Leitfaden geht es um die Frage, wie Go-Code aus einem C-Programm heraus aufgerufen werden kann.
Go 1.5 führte die Option -buildmode=c-archive ein, die die Generierung von C-aufrufbaren Archiven erleichtert. Das Generieren der erforderlichen Header-Dateien kann jedoch eine Herausforderung darstellen. Um dieses Problem zu beheben, ist es wichtig, Funktionen als exportierte CGo-Symbole zu markieren.
Betrachten Sie zur Veranschaulichung den folgenden Go-Code in foo.go:
package main import ( "C" "fmt" ) //export PrintInt func PrintInt(x int) { fmt.Println(x) } func main() {}
Um diesen Code als C zu kompilieren -Aufrufbare statische Bibliothek, führen Sie den folgenden Befehl aus:
go build -buildmode=c-archive foo.go
Dieser Befehl erstellt ein Archiv (foo.a) und eine Header-Datei (foo.h). Die Header-Datei enthält Deklarationen wie:
typedef long long GoInt64; typedef GoInt64 GoInt; extern void PrintInt(GoInt p0);
Mit diesen Deklarationen ist es jetzt möglich, die exportierte Funktion aus einem C-Programm aufzurufen:
#include "foo.h" int main(int argc, char **argv) { PrintInt(42); return 0; }
So kompilieren Sie dieses C-Programm:
gcc -pthread foo.c foo.a -o foo
Die Option -pthread ist erforderlich, da die Go-Laufzeit Threads verwendet. Bei der Ausführung gibt das Programm 42 aus.
Wenn Sie diese Schritte befolgen, können Sie Go-Code effektiv in vorhandenen C-Projekten verwenden und von den übergeordneten Funktionen von Go profitieren, während Sie gleichzeitig den von C bereitgestellten Zugriff auf niedriger Ebene beibehalten .
Das obige ist der detaillierte Inhalt vonWie kann ich Go-Code aus einem C-Programm heraus aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!