Интегрировать файлы Go в существующий проект C - PullRequest
0 голосов
/ 12 октября 2018

У меня есть большой проект, написанный на C, и я написал скрипт Go с функцией, которую я хотел бы вызвать из кода C ( C-> Go ).Эта же функция Go также должна вызывать некоторые функции языка Си ( Go-> C ).

Вот упрощенный взгляд на структуру проекта:

- src/...
- src/file_c.h
- src/file_c.c
- src/gocode/file_go.go
- src/Makefile

Здесьэто то, что я хотел бы сделать:

  • file_c.c должен включать file_go.h (C-> Go).
  • file_go.go должен включать file_c.h (Go-> C).
  • Программное обеспечение C имеет свой собственный большой Makefile, и я хотел бы продолжать использовать его для компиляции.Последний исполняемый двоичный файл также будет из существующего кода C (и будет вызывать функцию Go во время его выполнения).

Что я пробовал до сих пор:

В файле file_go.go перед оператором import "C" я добавил следующие строки:

// #cgo CFLAGS: -I..
// #include "file_c.h"

Затем я попытался скомпилировать file_go.go обеими командами:

go build -buildmode=c-shared file_go.go
go build -buildmode=c-archive file_go.go

Однако в обоихя получаю сообщения об ошибках вида undefined reference to func, где func - это функция C (объявленная в file_c.h и определенная в file_c.c), вызываемая из кода Go.

Если я удаляю вызовыиз Go-> C в file_go.go, тогда он компилируется правильно, и я могу правильно включить file_go.h в C Makefile.Однако мне нужен файл Go для вызова этой функции C.

Как мне создать файл Go таким образом, чтобы функция C была правильно связана?

...