golang交叉編譯

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

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,用時一天多的時間,我的程式也快樂的在板子上運行中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.