静态链接go程序与GNU读线
我正在编写一个Go程序,它使用GNU readline库实现一个奇特的命令行界面。为了简化安装过程,不必担心库版本和其他问题,我想静态链接它静态链接go程序与GNU读线,go,static-linking,libreadline,Go,Static Linking,Libreadline,我正在编写一个Go程序,它使用GNU readline库实现一个奇特的命令行界面。为了简化安装过程,不必担心库版本和其他问题,我想静态链接它 问题是我真的不知道怎么做。如果我预编译库,我将不得不提供代码的多个版本,以及.a或.lib readline库的不同版本。为了避免这个问题,我考虑将当前的readline代码包含到我的go项目中,并让go工具在构建go项目时编译它。但是,要构建readline库,必须使用make。有没有办法告诉go工具如何构建C代码?是的,您当然可以这样做。我最近在另一个
问题是我真的不知道怎么做。如果我预编译库,我将不得不提供代码的多个版本,以及.a或.lib readline库的不同版本。为了避免这个问题,我考虑将当前的readline代码包含到我的go项目中,并让go工具在构建go项目时编译它。但是,要构建readline库,必须使用
make
。有没有办法告诉go工具如何构建C代码?是的,您当然可以这样做。我最近在另一个项目中做了类似的事情,主要是因为代码没有作为库提供(Ubuntu只编译它的命令行工具)。为了实现这一点,我运行了带有选项的autoconf
脚本,我认为这些选项在大多数系统中都是合理的,并将C代码与自动构建的config.h
头文件一起复制到Go package目录中。然后,我用make
构建了一次原始的C代码,观察了gcc在编译和链接它时会得到哪些选项,并将适当的选项复制到其中(您也可以检查Makefile
,但这更简单)
以下是一些旁注:
- 您是否考虑过在Go中自己进行readline工作?如果它不能完全解决你的问题,那么它至少是一个相当好的种子
- 请记住,尽管readline是一个库,但它是GPL。如果你链接或嵌入你自己的软件,你就必须把它作为GPL来授权。如果您愿意的话,还有其他许可证不那么严格的
- 我建议避免阅读,因为有更好的选择;如请将此评论作为对问题的评论发布。它没有回答这个问题。