我正在編寫一個 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 關注
- 244 瀏覽
添加回答
舉報
0/150
提交
取消