Rufen Sie mit Go mit cgo Ihre eigene C-Sprachbibliothek auf

Verwenden Sie Ihre eigene C-Sprachbibliothek mit cgo in Go.

Erstellung einer C-Sprachbibliothek

Das Programm, das in eine Bibliothek umgewandelt werden soll, ist "hello.c" und "hello.h" ist die Header-Datei. main.c ist ein Programm, das diese Bibliothek verwendet.

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!

Verwenden Sie Ihre eigene Bibliothek in Go

Ich habe das folgende Programm namens "main.go" vorbereitet. cgo ist eine Funktion zur Verwendung des C-Sprachprogramms, das standardmäßig in Go with Go bereitgestellt wird.

main.go


package main

/*
#cgo LDFLAGS: -L. -lhello
#include <hello.h>
*/
import "C"

func main() {
	C.hello()
}

Importieren von Paketen, für die "C" importiert werden muss. Der direkt darüber geschriebene Kommentar ist der Code für die Verwendung der C-Sprache.

/*
#cgo LDFLAGS: -L. -lhello
#include <hello.h>
*/

Sie können die C-Sprache so schreiben, wie sie hier ist, und Sie können die hier im Go-Code definierten Funktionen verwenden. Gibt Informationen zur C-Sprachbibliothek, die zur Kompilierungszeit mit "LDFLAGS" verwendet werden soll. Diese hat dieselbe Bedeutung wie die beiden Argumente, die im vorherigen Kapitel mit "$ gcc -o main main.c -L. -Lhello" angegeben wurden. Eine Option, bei der -L den Speicherort der Bibliothek angibt. Die Bibliothek wurde im vorherigen Kapitel mit "libhello.a" erstellt und befindet sich im selben Verzeichnis. Geben Sie daher nur "." An. -l gibt die zu verwendende Bibliothek an, und die Spezifikationsmethode besteht darin, den Bibliotheksnamen ohne lib anzugeben, dh hallo ohne lib von libhello. Fügen Sie danach hello.h ein, damit Sie die Funktion hello () aufrufen können.

Das Ausführungsergebnis ist wie folgt.

$ go run main.go
Hello, World!

Recommended Posts

Rufen Sie mit Go mit cgo Ihre eigene C-Sprachbibliothek auf
Rufen wir Ihre eigene C ++ - Bibliothek mit Python auf (Einstellungen)
Rufen Sie mit ctypes Ihre eigene gemeinsam genutzte Bibliothek in C-Sprache von Python aus auf
[Stärkung des Lernens] DQN mit Ihrer eigenen Bibliothek
Veröffentlichen Sie Ihre eigene Python-Bibliothek auf Homebrew
Linux C / C ++ Erstellen Sie Ihre eigene Bibliothekserstellungsumgebung
Schritte zum Installieren Ihrer eigenen Bibliothek mit pip
Verwenden von X11 mit ubuntu18.04 (C-Sprache)
Bis Sie Ihre eigene Python-Bibliothek mit pip installieren können
Führen Sie die Intelligenz Ihrer eigenen Python-Bibliothek mit VScode aus.
Rufen Sie C von Python mit DragonFFI auf
Löse dein eigenes Labyrinth mit Q-Lernen
Verwenden Sie die Curl / JQ-Bibliothek mit Go
Trainiere UGATIT mit deinem eigenen Datensatz
Löse dein eigenes Labyrinth mit DQN
Verwenden wir die Skriptsprache für ein komfortables C ++ - Leben. 4 - Verwenden wir die eigene C ++ - Bibliothek aus der Skriptsprache. -
Ihr eigener Twitter-Client mit Django
Erstellen Sie mit Twisted Ihren eigenen DNS-Server
Erstellen Sie mit SQLAlchemy Ihren eigenen zusammengesetzten Wert
Tweet deine eigenen Sätze mit der Markov-Kette
[Python] Registrieren Sie Ihre eigene Bibliothek in PyPI
Bis Sie Ihre eigene Python-Bibliothek installieren
So importieren Sie Ihr eigenes Modul mit jupyter
Ich habe Hello World mit 64-Bit-OS + C-Sprache ohne Verwendung einer Bibliothek ausprobiert
Versuchen Sie, Ihr eigenes AWS-SDK mit bash zu erstellen
[Persönliches Memo] julia - Verwenden Sie die Python-Bibliothek mit julia unter Verwendung von PyCall
[Python] Implementieren Sie Ihre eigene listenähnliche Klasse mit collection.UserList
Erstellen Sie schnell Ihr eigenes Modul mit setuptools (Python)
Vorsichtsmaßnahmen bei Verwendung der Google Cloud-Bibliothek mit GAE / py
Trainieren Sie Stanford NER Tagger mit Ihren eigenen Daten
Erstelle deinen eigenen Musik-Player mit Bottle0.13 + jPlayer2.5!