Heim > Artikel > Backend-Entwicklung > Wie integriert man Go-Funktionen in bestehende C-Projekte: Eine Schritt-für-Schritt-Anleitung mit Lösungen für Verknüpfungsfehler?
Go-Funktionen in C-Programme integrieren
Go-Funktionen in C-Programme integrieren beinhaltet das Erstellen einer Go-Datei in eine Objektdatei (.o) und deren Einbindung in die Archivdatei (.a) des vorhandenen C-Projekts. Dies ermöglicht den Aufruf von Go-Funktionen innerhalb des C-Programms.
Im Beispielcode aufgetretene Probleme
Das vom Benutzer bereitgestellte Beispiel zeigt Fehler während der Verknüpfungsphase. Diese Fehler sind auf ein Missverständnis zurückzuführen, bei dem GCCGO im Gegensatz zum C-Programm eine Hauptfunktion in der Go-Datei erwartet.
Lösung mit Go 1.5 und höher
In Go 1.5 und In späteren Versionen wird dieses Problem behoben. Es ermöglicht die Erstellung von C-kompatiblen Bibliotheken mit dem Go-Tool. Mit dieser Funktion kann der Benutzer die C-Datei (main.c) wie in der Frage angegeben beibehalten und die Go-Datei (main.go) wie folgt aktualisieren:
<code class="go">package main import "C" import "fmt" //export PrintString func PrintString(cs *C.char) { s := C.GoString(cs) fmt.Println(s) } func main() {}</code>
Ein Go erstellen Objektdatei
Um die Go-Datei in eine Objektdatei zu erstellen, führen Sie den folgenden Befehl aus:
go build -buildmode c-archive -o mygopkg.a
Integration in C-Projekt
Um die Go-Objektdatei mit dem C-Programm (_main.c) zu verknüpfen, verwenden Sie den folgenden Befehl, um die endgültige Binärdatei zu erstellen:
gcc -o main _main.c mygopkg.a -lpthread
Alternativer Ansatz für gemeinsam genutzte Bibliotheken
Wenn Sie lieber eine gemeinsam genutzte Bibliothek mit Go erstellen möchten, erstellt der folgende Befehl mygopkg.so:
go build -buildmode c-shared -o mygopkg.so
Um die gemeinsam genutzte Bibliothek mit _main.c zu verknüpfen, führen Sie diesen Befehl aus:
LD_RUN_PATH=$(pwd) gcc -o main _main.c mygopkg.so -lpthread
Hinweis: Legen Sie LD_RUN_PATH fest, um sicherzustellen, dass der Linker die gemeinsam genutzte Bibliothek während der Laufzeit im aktuellen Verzeichnis findet.
Weitere Details und Einblicke finden Sie im Designdokument für Go-Ausführungsmodi .
Das obige ist der detaillierte Inhalt vonWie integriert man Go-Funktionen in bestehende C-Projekte: Eine Schritt-für-Schritt-Anleitung mit Lösungen für Verknüpfungsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!