Utilisez votre propre bibliothèque de langage C avec cgo dans Go.
Le programme à transformer en bibliothèque est «hello.c» et «hello.h» est son fichier d'en-tête. main.c
est un programme qui utilise cette bibliothèque.
hello.c
#include <stdio.h>
#include "hello.h"
void hello(void)
{
printf("Hello, World!\n");
}
hello.h
extern void hello(void);
main.c
#include <stdlib.h>
#include "hello.h"
int main(int argc, char *argv[])
{
hello();
return EXIT_SUCCESS;
}
$ gcc -c hello.c
$ ar rusv libhello.a hello.o
$ gcc -o main main.c -L. -lhello
$ ./main
Hello, World!
J'ai préparé le programme suivant appelé main.go
. cgo est une fonction permettant d'utiliser le programme en langage C fourni en standard dans Go with Go.
main.go
package main
/*
#cgo LDFLAGS: -L. -lhello
#include <hello.h>
*/
import "C"
func main() {
C.hello()
}
ʻImport Importe un paquet qui requiert "C" `. Le commentaire écrit juste au-dessus est le code d'utilisation du langage C.
/*
#cgo LDFLAGS: -L. -lhello
#include <hello.h>
*/
Vous pouvez écrire le langage C tel quel ici, et vous pouvez utiliser les fonctions définies ici dans le code Go. Donne des informations sur la bibliothèque du langage C à utiliser au moment de la compilation avec LDFLAGS
, qui a la même signification que les deux arguments spécifiés avec $ gcc -o main.c -L. -Lhello
dans le chapitre précédent. Une option où -L
spécifie l'emplacement de la bibliothèque. La bibliothèque est libhello.a
créée dans le chapitre précédent et se trouve dans le même répertoire, spécifiez donc uniquement .
. -l
spécifie la bibliothèque à utiliser, et la méthode de spécification est de spécifier le nom de la bibliothèque en excluant lib
, c'est-à-dire hello
en excluant lib
de libhello
. Après cela, incluez hello.h
pour pouvoir appeler la fonction hello ()
.
Le résultat de l'exécution est le suivant.
$ go run main.go
Hello, World!
Recommended Posts