链接程序与GNU readline静态

时间:2013-09-09 18:57:15

标签: go static-linking libreadline

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

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

2 个答案:

答案 0 :(得分:5)

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

几个旁注:

  • 您是否考虑过使用Go本身的readline工作? ssh terminal package至少作为一个非常好的种子,如果它没有完全解决你的问题。

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

答案 1 :(得分:1)

我建议避免使用readline,存在更好的替代方案;比如https://github.com/edsrzf/fineline