为了账号安全,请及时绑定邮箱和手机立即绑定

静态链接 go 程序与 GNU readline

静态链接 go 程序与 GNU readline

Go
守候你守候我 2021-06-06 12:15:16
我正在编写一个 Go 程序,它使用 GNU readline 库来实现一个漂亮的命令行界面。为了简化安装过程而不用担心库版本和其他东西,我想静态链接它。问题是我真的不知道该怎么做。如果我预编译库,我将不得不提供我的代码的多个版本,以及不同版本的 .a 或 .lib readline 库。为了避免这个问题,我想只将当前的 readline 代码包含到我的 go 项目中,并让 go 工具在构建 go 项目时编译它。但是,要构建 readline 库,必须使用make. 有没有办法告诉 go 工具如何构建 C 代码?
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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

几个边注:

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

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


查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信