我正在为Go中的C库编写Go包装器。问题是,C库在许多Linux发行版上都不可用,所以我想要一个解决方案,我可以去github.com/me/mylibrary"不需要任何人安装库。
一种解决方案是将库的源添加到子目录中。然后,当我的项目使用go get构建时,我也需要自动构建此库。但我不知道如何自动化这个。
或者我可以有一个下载源代码,提取并构建它的脚本
但我不知道如何将这些构建步骤与go构建工具联系起来。
链接静态库也不是最容易的。
#cgo linux LDFLAGS: ./MyLib/lib/libMyLib.a -lstdc++ -lm -lX11
只要我从我的库构建就可以工作,但是一旦我想从另一个项目构建,相对路径来自该项目,而不是来自我的库,所以它失败了。
答案 0 :(得分:0)
根据http://golang.org/cmd/cgo/#hdr-Using_cgo_with_the_go_command
当Go工具看到一个或多个Go文件使用特殊导入时 “C”,它将在目录中查找其他非Go文件并进行编译 它们是Go包的一部分。任何.c,.s或.S文件都是 用C编译器编译。任何.cc,.cpp或.cxx文件都是 用C ++编译器编译。
因此,您可以在存储库中包含C库源代码,然后自动构建它。该页面还解释了如何将构建标志传递给编译器以及可能需要知道的任何其他内容。