Maison  >  Article  >  développement back-end  >  Comment compiler correctement un projet Golang à l'aide d'un package contenant du code C

Comment compiler correctement un projet Golang à l'aide d'un package contenant du code C

WBOY
WBOYavant
2024-02-06 10:24:03979parcourir

如何使用包含 C 代码的包正确编译 Golang 项目

Contenu de la question

J'ai commencé à écrire un projet en Golang et j'ai immédiatement rencontré un problème. J'ai besoin de me connecter au matériel à partir de mon code et j'ai un pilote et un wrapper Golang fournis par le fournisseur. La description de la connexion wrapper indique que le code doit être placé dans le répertoire src du projet (je n'utilise pas un tel répertoire, mais je mets les fichiers par nom de package dans le répertoire ./internal/fptr10 et dans mon main. allez, il a été importé avec succès). J'ai vu la méthode dans ce package dans l'EDI GoLand, mais lorsque j'essaie de compiler le projet (j'appelle la première fonction censée créer l'instance de pilote, appelée New()) - j'obtiens l'erreur : fptr10. New() n'est pas défini. Il y a deux fichiers d'en-tête écrits en C dans le répertoire wrapper et je sais qu'il y a quelque chose qui ne va pas avec eux mais je ne comprends pas comment le compiler correctement.

L'ensemble du projet, ainsi que la bibliothèque elle-même, peuvent être trouvés sur https://github.com/Natrix31/KKTWatcher P.S. : je travaille sous Windows

J'ai essayé de compiler le projet depuis l'EDI et depuis la ligne de commande en utilisant go build et go install Mais le résultat est le même. Le programme ne parvient pas à compiler et donne l'erreur : New() non défini


Réponse correcte


Dans ce cas, vous pouvez mettre le code c dans le module go, assurez-vous simplement d'avoir un compilateur c installé sur votre plate-forme et utilisez les commentaires de préface pour citations.

main.go

/*
    #include <stdio.h>
    #include <math.h>
    #include "calc.h"
*/
import "c"

func main() {
    fmt.println(c.add(1, 2))
}

calc.c

#include "calc.h"

int add(int a, int b) {
    return a + b;
}

calc.h

int add(int a, int b);

go a cgo activé par défaut, alors construisez-le :

go build -o main.out .

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer