[golang]如何在windows上使用cgo

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

golang的cgo是調用gcc編譯c代碼的,gcc工具鏈在linux上很方便,但windows上是沒有的。而windows上一般用的vc,golang是不支援的。那麼如果確實有這樣的需求怎麼辦呢?用MinGW。

一般linux上的包是不能直接在windows上編譯的,除非藉助Cygwin或者MSYS。(然後還有一大堆依賴要解決)。項目上要cgo調用的是ImageMagick,直接能找到vc編譯好的庫,省去了一堆麻煩事。

這裡要注意MinGW有32位和64位之分(MinGW-w64),務必不要裝錯了。(32位gcc的預設編譯參數是相容幾十年前的386CPU,所以能放棄就放棄32位吧。。。好難得能甩掉那麼陳舊的曆史包袱)

下一個問題是vc庫的格式是.lib與gcc的.a是不同的,老版本的MinGW需要用reimp工具將lib轉成a,新版本直接相容lib格式,reimp也被移除了。考慮到後面連結參數比較難寫,直接簡單粗暴改名字了,CORE_RL_MagickCore_.lib -> libcore.a ,CORE_RL_MagickWand_.lib -> libwand.a。

剩下的事情就和linux上差不多了,set環境變數C_INCLUDE_PATH為include路徑,set環境變數CGO_LDFLAGS為-L "{lib路徑}" -lcore -lwand,最後記得加上ImageMagick sdk 中定義的編譯參數no_pkgconfig來屏蔽對pkgconfig的調用,go install -tags no_pkgconfig,完成。

因為go有編譯緩衝,也就是$GOPATH/pkg,只要cgo部分代碼不變更,是不需要加這部分參數的。所以如果要使用cgo,像ImageMagick sdk一樣做一個薄封裝,將c函數轉成go函數是非常有必要的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.