【发布时间】:2019-05-21 02:12:11
【问题描述】:
我正在尝试在 Go 中包装 C++ 代码 (LabStreamingLayer)。
更新:@dragonx 解释了如何在没有swig 的情况下使用go build。但我仍然遇到链接器问题。构建取决于LSL/liblsl/bin/liblsl.dylib。我如何告诉go build 使用该文件?我试过go build -ldflags "-L ../liblsl/bin -l lsl" app.go 没有成功。
Go documentation 表示 go build 将使用 c++ 选项调用带有 .swigcxx 扩展名的文件的 Swig,但 go build 抱怨目录中没有可构建的 Go 源文件。
- 平台:达尔文
- Go 版本:1.8
- Swig 版本:3.0.12
- clang 版本:8.0.0
以下是我为解决该错误而采取的步骤:
- 克隆 labstreaminglayer 存储库。
- 将文件
liblsl_cpp.i重命名为liblsl.swigcxx(我认为这会告诉go build该文件应该与 swig 一起使用)。 -
cd进入LSL/liblsl-Generic并运行go build。 Go 抱怨此目录中没有可构建的 Go 源文件。
失败后,我尝试使用 Swig。我运行了swig -c++ -go -cgo -intgosize 64 liblsl_cpp.i,它创建了一个.go 文件。然后我在该目录中运行go build,但它引发了错误:
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1
我不熟悉 C++,所以我不确定如何解决链接器问题。我知道这个 C++ 代码需要文件LSL/liblsl/bin/liblsl64.dylib。我认为这是必须链接的文件?
如何在 Go 中包装这个 C++ 代码?
这是文件结构:
LSL
├── liblsl
│ ├── bin
│ ├── distros
│ ├── examples
│ ├── external
│ ├── include
│ ├── project
│ ├── src
│ └── testing
└── liblsl-Generic
├── AUTOGENERATE\ HOWTO.txt
├── examples
├── liblsl.swigcxx
├── liblsl_c.i
├── liblsl_cpp.i
├── liblsl_wrap.cxx # created by Swig
└── liblsl.go # created by Swig
【问题讨论】: