Maison  >  Article  >  développement back-end  >  Comment intégrer des fonctions Go dans des projets C existants : un guide étape par étape avec des solutions pour les erreurs de liaison ?

Comment intégrer des fonctions Go dans des projets C existants : un guide étape par étape avec des solutions pour les erreurs de liaison ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-27 12:10:02951parcourir

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

Comment utiliser Go dans des projets C existants

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn