【问题标题】:Link go program vs GNU readline statically静态链接 go 程序与 GNU readline
【发布时间】:2013-09-09 18:57:14
【问题描述】:

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

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

【问题讨论】:

    标签: go static-linking libreadline


    【解决方案1】:

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

    一些旁注:

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

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

    【讨论】:

      【解决方案2】:

      我建议避免使用 readline,有更好的选择;喜欢https://github.com/edsrzf/fineline

      【讨论】:

      • 请将此评论作为对该问题的评论发表。它没有回答问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多