Heim >Backend-Entwicklung >Golang >Wie kann ich Go-Funktionen aus einem C-Programm mit „-buildmode=c-archive' von Go 1.5 aufrufen?

Wie kann ich Go-Funktionen aus einem C-Programm mit „-buildmode=c-archive' von Go 1.5 aufrufen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-19 19:53:13640Durchsuche

How Can I Call Go Functions from a C Program Using Go 1.5's `-buildmode=c-archive`?

Aufrufen von Go-Code aus einem C-Programm mit Go 1.5

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.

Go-Funktionen für C-Aufruf exportieren

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() {}

Compilerkonfiguration für C Verwendung

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.

Integration in ein C-Projekt

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;
}

Kompilierung und Ausführung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn