11 июля 2016 г.

Использование языка C в Go программах

Статья, которая послужит памяткой по использованию "сишного" кода в программах на Go. Для профи тут мало чего интересного, но новичкам будет полезно.

Cgo

Go настолько замечательный язык, что его можно использовать не только вместо языка Си, но и вместе с Си. Для этого есть специальная "тулза" cgo. И есть замечательная статья, которая объясняет основы использования cgo. Но там, как пример, приводится использование только стандартных библиотечных функций. В этой же статье я попытался показать маленький пример, как использовать cgo для работы со своими кусками "сишного" кода.

C в Go

Для использования Си кода проще всего создать библиотеку, которую можно будет линковать с нашей программой.

В директории нашего Go проекта создадим директорию: c_lib
Затем в директории c_lib создадим файл: example.c
int x(int y) {
    return y+1;
}
и второй файл: example.h
int x(int);
Теперь компилируем и создаем нашу библиотеку, которую потом будем использовать.
$ gcc -O2 -c example.c
$ ar q libexample.a example.o
Название библиотеки должно начинаться с lib иначе линкер не сможет ее найти.
В директории нашего Go проекта создаём файл: test.go
package main

// #cgo CFLAGS: -I ./c_lib
// #cgo LDFLAGS: -L ./c_lib -lexample
// #include <example.h>
import "C"

import "fmt"

func main() {
  fmt.Printf("Invoking c library...\n")
  fmt.Println("Done ", C.x(10))
}
#cgo CFLAGS: -I. - Добавляет каталог "директория" в начало списка каталогов, используемых для поиска заголовочных файлов.
#cgo LDFLAGS: -L. -lexample - Флаги линковщика, которые указывают в какой папке следует искать библиотеки (-L.) и какую библиотеку нужно подключать (-lexample).

Теперь попробуем собрать все вместе
$ go build test.go
$ ./test
Invoking c library...
Done  11
Вуаля! Всё работает.

Ссылка на скачивание архива с примером: Скачать Cgo Example
По ссылке архив, сжатый архиватором: 7-zip

Для сборки примера под Windows нужно:
  1. Установить MinGW-w64 (инструкция по установке).
  2. Добавить в системную переменную PATH путь до установленного компилятора. Пример пути: c:\mingw-w64\i686-6.1.0-posix\mingw32\bin
  3. Убедиться, что в консоли по команде gcc -v выдаётся версия компилятора.

Почитать по теме:

Источник

Комментариев нет:

Отправить комментарий