Maison > développement back-end > Golang > le corps du texte

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
Libérer: 2024-10-27 12:10:02
original
1036 Les gens l'ont consulté

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>
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal