Оборачивание большой библиотеки C ++ в Go - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь обернуть большую библиотеку 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
...