我正在编写一个Go程序,它使用GNU readline库作为花哨的命令行界面。为了简化安装过程而不用担心库版本和其他东西,我想静态链接它。
问题是我真的不知道该怎么做。如果我预编译库,我将不得不提供我的代码的几个版本,以及.a或.lib readline库的不同版本。为了避免这个问题,我考虑将当前的readline代码包含到我的go项目中,并让go工具在构建go项目时编译它。但是,要构建readline库,必须使用make
。有没有办法告诉go工具如何构建C代码?
答案 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