Я пытаюсь обернуть большую библиотеку C ++ в Golang, используя SWIG. В библиотеке уже есть файл SWIG, используемый для переноса других языков. Все скомпилировано с использованием CMake, но в следующем небольшом примере я использую только что-то похожее на документацию SWIG Go (http://www.swig.org/Doc4.0/SWIGDocumentation.html).
Архитектура библиотеки организована как показано ниже:
largelib
|-src
|-largelib.cpp
|-other.cpp
|-...
|-largelib.i
|-include
|-largelib.h
|-other.h
|-...
|-externals
|-externallib
|-...
Чтобы протестировать упрощенный случай, я начал со следующего примера https://github.com/zacg/simplelib, размещая файл. cpp и .h в две разные папки. Это выглядит примерно так:
simplelib
|-src
|-simplelib.cpp
|-simplelib.i
|-include
|-simplelib.h
Как и в примере, я генерирую файлы simplelib_wrap.cxx и simplelib. go, используя:
swig -go -Iinclude -cgo -c++ -intgosize 64 ./src/simplelib.i
"-Iinclude" делает работает для включения файла заголовка.
И для компиляции:
go build -x ./src/
Это не работает и возвращает следующую ошибку:
simpleclass.cpp:1:10: fatal error: simpleclass.h: No such file or directory
#include "simpleclass.h"
Проблема заключается в во время компиляции "simpleclass. cpp" файл заголовка не включается. Я попытался добавить в файл simplelib. go следующие cflags, чтобы попытаться добавить эту папку, но это не помогает.
#cgo CFLAGS: -I${SRCDIR}/../include