2

我正在编写一个 Go 程序,它使用 GNU readline 库作为一个精美的命令行界面。为了简化安装过程并且不用担心库版本和其他东西,我想静态链接它。

问题是我真的不知道该怎么做。如果我预编译该库,我将不得不提供我的代码的多个版本,以及不同版本的 .a 或 .lib readline 库。为了避免这个问题,我想只将当前的 readline 代码包含到我的 go 项目中,并让 go 工具在构建 go 项目时对其进行编译。但是,要构建 readline 库,必须使用make. 有没有办法告诉 go 工具如何构建 C 代码?

4

2 回答 2

5

是的,你当然可以这样做。我最近对另一个项目做了类似的事情,主要是因为代码不能作为库提供(Ubuntu 只编译命令行工具)。为了实现它,我autoconf使用我认为在大多数系统中可行的选项运行脚本,并将 C 代码与自动构建的config.h头文件一起复制到 Go 包目录中。然后,我用make一次构建了原始的 C 代码,并观察了 gcc 在编译和链接时会得到哪些选项,并将适当的选项复制到cgo 的 LDFLAGS 和 CFLAGS 选项中(你也可以检查 . Makefile,但这更容易)。

一些旁注:

  • 您是否考虑过在 Go 本身中进行 readline 工作?ssh 终端包至少可以作为一个很好的种子,如果它不能完全解决你的问题的话。

  • 请记住,尽管 readline 是一个库,但它是 GPL。如果您链接或嵌入它,您也必须将自己的软件许可为 GPL。如果您关心的话,还有其他一些具有不太严格的许可证的smilar 库。

于 2013-09-09T20:23:10.037 回答
1

我建议避免使用 readline,存在更好的选择;像https://github.com/edsrzf/fineline

于 2013-09-09T21:20:25.320 回答