Heim >Backend-Entwicklung >Golang >Wie kann ich Go-Code in mein bestehendes C-Projekt integrieren?

Wie kann ich Go-Code in mein bestehendes C-Projekt integrieren?

DDD
DDDOriginal
2024-12-17 18:48:13480Durchsuche

How Can I Integrate Go Code into My Existing C Project?

Go-Code in ein bestehendes C-Projekt integrieren

Frage:
Ist es möglich, Go-Code aufzurufen? aus einem C-Programm, und wenn ja, wie kann das sein? erreicht?

Antwort:
Ja, Go 1.5 hat den -buildmode=c-archive-Modus eingeführt, der es ermöglicht, Go-Code in ein Archiv zu kompilieren, das für die Verknüpfung mit C-Programmen geeignet ist. So integrieren Sie Go-Code in ein vorhandenes C-Projekt:

  1. Funktionen für den Export markieren:

    • Funktionen, die von C aufgerufen werden sollen, müssen im Go-Code mit //Kommentare exportieren gekennzeichnet sein.
    • Stellen Sie sicher, dass das Go-Paket, das diese Funktionen enthält, benannt ist main.
    • Fügen Sie eine Funktion mit dem Namen main ein, auch wenn sie leer ist.
    • Importieren Sie das C-Paket.
  2. Kompilieren Go-Archiv:

    • Kompilieren Sie den Go-Code mit in eine C-aufrufbare statische Bibliothek den folgenden Befehl:

      go build -buildmode=c-archive foo.go
    • Dadurch werden ein Archiv und eine Header-Datei generiert (z. B. foo.a und foo.h).
  3. C-Programm verknüpfen:

    • In das C-Programm einbinden die generierte Header-Datei:

      #include "foo.h"
    • Verknüpfung mit dem Go-Archiv mithilfe der Option -pthread:

      gcc -pthread foo.c foo.a -o foo
    • Dies ermöglicht dem C-Programm Rufen Sie das exportierte Go auf Funktionen.

Beispiel:

Bedenken Sie den folgenden Go-Code (foo.go):

package main

import "C"
import "fmt"

//export PrintInt
func PrintInt(x int) {
    fmt.Println(x)
}

func main() {}

Kompilieren Sie es in ein Archiv:

go build -buildmode=c-archive foo.go

Dann in einem C-Programm (foo.c):

#include "foo.h"

int main(int argc, char **argv) {
    PrintInt(42);
    return 0;
}

Kompilieren Sie es:

gcc -pthread foo.c foo.a -o foo

Wenn Sie foo ausführen, wird „42“ ausgegeben.

Das obige ist der detaillierte Inhalt vonWie kann ich Go-Code in mein bestehendes C-Projekt integrieren?. 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