這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
golang傳的很牛X,但不能交叉編譯,對我來說一點用都沒有,有個開源項目是用golang寫的,如果不能在arm上用,那麼我只能將它“翻譯”成C,再整合到我的產品中,但我沒有這個時間。
好在交叉編譯最後還是成功了。
1. 準備工作
1.1 golang環境及arm交叉編譯工具
可以參考《golang安裝手劄》這篇文章。
1.2 GCC交叉編譯器
在1.1基礎上,已經可以編譯能在Arm上啟動並執行純golang寫的二進位了,但有一個尚未解決的問題是:golang與C聯合開發的模組,編譯時間報錯:
can't load package: no buildable Go source files in /...
問題原因在於,關閉cgo的情況下,golang的編譯器會自動“忽略”掉帶有"import "C""字樣的源檔案。解決這個問題需要開啟cgo的支援,如編譯時間的命令改為:
GOARCH=arm CGO_ENABLED=1 go build hello.go
但這還不夠,還需要安裝arm平台的編譯器,如gcc-4.7-arm-linux-gnueabi(版本號碼要與目標平台的版本號碼一致),以及gcc-4.7-multilib-arm-linux-gnueabi的支援。還需要將/usr/bin/gcc重新ln到arm的交叉編譯器上。
完成以上工作後,import "C"就沒問題了。
1.3 第三方庫
使用import "C"的主要目的就是使用第三方開源庫,golang尋找第三方庫使用的是pkg-config,首先要保證pkg-config正常工作;另外,要保證第三方庫,及第三方庫的依賴庫,都是arm版本的,才能正常link成功。連結成功的golang的程式,就可以愉快的在arm板上運行了。
golang的初步冒險就到些結束了,從下代碼到完成這篇blog,用時一天多的時間,我的程式也快樂的在板子上運行中。