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?

Wie integriert man Go-Funktionen in bestehende C-Projekte: Eine Schritt-für-Schritt-Anleitung mit Lösungen für Verknüpfungsfehler?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 12:10:021031Durchsuche

How to Integrate Go Functions into Existing C Projects: A Step-by-Step Guide with Solutions for Linking Errors?

So verwenden Sie Go in vorhandenen C-Projekten

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!

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