In Go 1.5 wurde die Funktion -buildmode=c-archive eingeführt, um Go-Code in Nicht-Go-Code zu überbrücken Umgebungen. Mit dieser Funktion können Sie Go-Code in ein vorhandenes C-Projekt integrieren und so Aufgaben auf höherer Ebene an das ausführlichere Go delegieren.
Um Go zu erstellen Für C-Code verfügbare Funktionen müssen Sie explizit mithilfe spezieller //Exportkommentare exportieren.
package main import ( "C" "fmt" ) //export PrintInt func PrintInt(x int) { fmt.Println(x) } func main() {}
Das Kompilieren des Go-Codes als C-aufrufbare Bibliothek erfordert die Verwendung des Flags -buildmode=c-archive.
go build -buildmode=c-archive foo.go
Dieser Befehl generiert eine statische Bibliothek (foo.a) und eine Header-Datei (foo.h), die die exportierte Funktionsdeklaration enthält.
Innerhalb Fügen Sie in Ihr C-Projekt die generierte Header-Datei ein und verwenden Sie die bereitgestellte Funktion wie folgt:
#include "foo.h" int main(int argc, char **argv) { PrintInt(42); return 0; }
Um das C-Programm zu kompilieren, verwenden Sie das Flag -pthread für ordnungsgemäße Thread-Unterstützung .
gcc -pthread foo.c foo.a -o foo
Durch Ausführen der ausführbaren Datei wird nun die beabsichtigte Ganzzahl (42) auf der Konsole ausgegeben.
Das obige ist der detaillierte Inhalt vonWie kann ich Go-Funktionen aus einem C-Programm mit „-buildmode=c-archive' von Go 1.5 aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!