Intégration des fonctions Go dans les programmes C
Intégration des fonctions Go dans les programmes C implique de créer un fichier Go dans un fichier objet (.o) et de l'incorporer dans le fichier d'archive (.a) du projet C existant. Cela permet d'appeler des fonctions Go à partir du programme C.
Problèmes rencontrés dans l'exemple de code
L'exemple fourni par l'utilisateur présente les erreurs lors de la phase de liaison. Ces erreurs proviennent d'un malentendu où GCCGO attend une fonction principale dans le fichier Go, contrairement au programme C.
Solution avec Go 1.5 et au-delà
Dans Go 1.5 et versions ultérieures, ce problème est résolu. Il permet de créer des bibliothèques compatibles C à l'aide de l'outil Go. Avec cette fonctionnalité, l'utilisateur peut conserver le fichier C (main.c) comme indiqué dans la question et mettre à jour le fichier Go (main.go) comme suit :
<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>
Construire un Go Fichier objet
Pour créer le fichier Go dans un fichier objet, exécutez la commande suivante :
go build -buildmode c-archive -o mygopkg.a
Intégration dans le projet C
Pour lier le fichier objet Go au programme C (_main.c), utilisez la commande suivante pour construire le binaire final :
gcc -o main _main.c mygopkg.a -lpthread
Approche alternative pour les bibliothèques partagées
Si vous préférez créer une bibliothèque partagée avec Go, la commande suivante créera mygopkg.so :
go build -buildmode c-shared -o mygopkg.so
Pour lier la bibliothèque partagée avec _main.c, exécutez cette commande :
LD_RUN_PATH=$(pwd) gcc -o main _main.c mygopkg.so -lpthread
Remarque : Définissez LD_RUN_PATH pour garantir que l'éditeur de liens localise la bibliothèque partagée dans le répertoire actuel pendant l'exécution.
Pour plus de détails et d'informations, reportez-vous au document de conception des modes d'exécution Go. .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!