Maison > développement back-end > Golang > Comment puis-je appeler des fonctions Go à partir d'un programme C à l'aide de « -buildmode=c-archive » de Go 1.5 ?

Comment puis-je appeler des fonctions Go à partir d'un programme C à l'aide de « -buildmode=c-archive » de Go 1.5 ?

Linda Hamilton
Libérer: 2024-12-19 19:53:13
original
669 Les gens l'ont consulté

How Can I Call Go Functions from a C Program Using Go 1.5's `-buildmode=c-archive`?

Appel de code Go à partir d'un programme C avec Go 1.5

Dans Go 1.5, la fonctionnalité -buildmode=c-archive a été introduite pour relier le code Go en non-Go environnements. Avec cette fonctionnalité, vous pouvez intégrer du code Go dans un projet C existant, vous permettant ainsi de déléguer des tâches de niveau supérieur au Go plus verbeux.

Exportation des fonctions Go pour l'invocation C

Pour créer Go fonctions disponibles pour le code C, vous devez les exporter explicitement à l'aide de commentaires spéciaux //export.

package main

import (
    "C"
    "fmt"
)

//export PrintInt
func PrintInt(x int) {
    fmt.Println(x)
}

func main() {}
Copier après la connexion

Configuration du compilateur pour C Utilisation

La compilation du code Go en tant que bibliothèque appelable en C nécessite l'utilisation de l'indicateur -buildmode=c-archive.

go build -buildmode=c-archive foo.go
Copier après la connexion

Cette commande génère une bibliothèque statique (foo.a) et un fichier d'en-tête (foo.h) contenant la déclaration de fonction exportée.

Intégration dans un projet C

Dans votre C projet, incluez le fichier d'en-tête généré et utilisez la fonction fournie comme suit :

#include "foo.h"

int main(int argc, char **argv) {
    PrintInt(42);
    return 0;
}
Copier après la connexion

Compilation et exécution

Pour compiler le programme C, utilisez l'indicateur -pthread pour une prise en charge appropriée des threads.

gcc -pthread foo.c foo.a -o foo
Copier après la connexion

L'exécution de l'exécutable imprimera désormais l'entier prévu (42) sur la console.

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