我正在编写一个 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。如果您愿意,还有其他类似的库,但许可证不太严格。
- 2 回答
- 0 关注
- 205 浏览
添加回答
举报
0/150
提交
取消