我正在編寫一個 Go 程序,它使用 GNU readline 庫來實現(xiàn)一個漂亮的命令行界面。為了簡化安裝過程而不用擔(dān)心庫版本和其他東西,我想靜態(tài)鏈接它。問題是我真的不知道該怎么做。如果我預(yù)編譯庫,我將不得不提供我的代碼的多個版本,以及不同版本的 .a 或 .lib readline 庫。為了避免這個問題,我想只將當前的 readline 代碼包含到我的 go 項目中,并讓 go 工具在構(gòu)建 go 項目時編譯它。但是,要構(gòu)建 readline 庫,必須使用make. 有沒有辦法告訴 go 工具如何構(gòu)建 C 代碼?
2 回答

有只小跳蛙
TA貢獻1824條經(jīng)驗 獲得超8個贊
是的,你當然可以這樣做。我最近在一個不同的項目中做了類似的事情,主要是因為代碼不能作為庫使用(Ubuntu 只為它編譯命令行工具)。為了實現(xiàn)它,我autoconf
使用我認為在大多數(shù)系統(tǒng)中合理的選項運行腳本,并將 C 代碼與自動構(gòu)建的config.h
頭文件一起復(fù)制到 Go 包目錄中。然后,我用make
一次構(gòu)建了原始 C 代碼,并觀察了 gcc 在編譯和鏈接它時會得到哪些選項,并將適當?shù)?a >選項復(fù)制到cgo 的 LDFLAGS 和 CFLAGS 選項中(您也可以檢查Makefile
,但這更容易)。
幾個邊注:
你有沒有考慮過在 Go 本身中做 readline 工作?如果ssh 終端包不能完全解決您的問題,它至少可以作為一個很好的種子。
請記住 readline 雖然是一個庫,但它是 GPL。如果您鏈接或嵌入它,您也必須將自己的軟件許可為 GPL。如果您愿意,還有其他類似的庫,但許可證不太嚴格。
- 2 回答
- 0 關(guān)注
- 233 瀏覽
添加回答
舉報
0/150
提交
取消