Maison > développement back-end > Golang > Comment puis-je intégrer Go Code dans mon projet C existant ?

Comment puis-je intégrer Go Code dans mon projet C existant ?

DDD
Libérer: 2024-12-17 18:48:13
original
414 Les gens l'ont consulté

How Can I Integrate Go Code into My Existing C Project?

Intégrer Go Code dans un projet C existant

Question :
Est-il possible d'appeler Go Code à partir d'un programme C, et si oui, comment cela peut-il être atteint ?

Réponse :
Oui, Go 1.5 a introduit le mode -buildmode=c-archive, qui permet de compiler le code Go dans une archive adaptée à la liaison avec des programmes C. Pour intégrer du code Go dans un projet C existant :

  1. Marquer les fonctions pour l'exportation :

    • Les fonctions destinées à être appelées depuis C doivent être marqué de //export commentaires dans le code Go.
    • Assurez-vous que le package Go contenant ces fonctions est nommé main.
    • Inclure une fonction nommée main, même si elle est vide.
    • Importer le package C.
  2. Compiler Go Archive :

    • Compilez le code Go dans un fichier statique appelable en C bibliothèque en utilisant la commande suivante :

      go build -buildmode=c-archive foo.go
      Copier après la connexion
      Copier après la connexion
    • Cela générera une archive et un fichier d'en-tête (par exemple, foo.a et foo.h).
  3. Programme Link C :

    • Dans le C programme, incluez le fichier d'en-tête généré :

      #include "foo.h"
      Copier après la connexion
    • Lien vers l'archive Go à l'aide de l'option -pthread :

      gcc -pthread foo.c foo.a -o foo
      Copier après la connexion
      Copier après la connexion
    • Cela permettra au Programme C pour appeler le Go exporté fonctions.

Exemple :

Considérez le code Go suivant (foo.go) :

package main

import "C"
import "fmt"

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

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

Compilez-le dans une archive :

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

Ensuite, dans un programme C (foo.c) :

#include "foo.h"

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

Compilez-le :

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

L'exécution de foo affichera "42".

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal