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
DDDoriginal
2024-12-17 18:48:13480parcourir

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
    • 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"
    • Lien vers l'archive Go à l'aide de l'option -pthread :

      gcc -pthread foo.c foo.a -o foo
    • 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() {}

Compilez-le dans une archive :

go build -buildmode=c-archive foo.go

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

#include "foo.h"

int main(int argc, char **argv) {
    PrintInt(42);
    return 0;
}

Compilez-le :

gcc -pthread foo.c foo.a -o foo

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!

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