4

我正在为 Go 中的 C 库编写 Go 包装器。问题是,C 库在许多 Linux 发行版上不可用,所以我想要一个解决方案,我“去获取 github.com/me/mylibrary”不需要任何人安装该库。

一种解决方案是将库的源代码添加到子目录中。然后,当我的项目使用 go get 构建时,我也需要自动构建这个库。但我不知道如何实现自动化。

或者,我可以有一个脚本来下载源代码,提取并构建它

但我不知道如何将这些构建步骤与 go build 工具联系起来。

链接静态库也不是最简单的。

#cgo linux LDFLAGS: ./MyLib/lib/libMyLib.a -lstdc++ -lm -lX11

只要我从我的库构建就可以工作,但是一旦我想从另一个项目构建,相对路径就来自该项目而不是来自我的库,所以它失败了。

4

1 回答 1

0

根据http://golang.org/cmd/cgo/#hdr-Using_cgo_with_the_go_command

当 Go 工具看到一个或多个 Go 文件使用了特殊的 import "C" 时,它会在目录中查找其他非 Go 文件并将它们编译为 Go 包的一部分。任何 .c、.s 或 .S 文件都将使用 C 编译器进行编译。任何 .cc、.cpp 或 .cxx 文件都将使用 C++ 编译器进行编译。

因此,您可以在存储库中包含 C 库源代码,然后 Go 将自动构建它。该页面还解释了如何将构建标志传递给编译器以及您可能需要知道的任何其他内容。

于 2014-04-17T22:55:34.930 回答