[golang] cgo項目如何編譯便攜版二進位檔案

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

專案計劃直接用二進位檔案分發,本來golang在這是沒有一點問題的,但是用了cgo引入ImageMagick,那就是另一回事了,ldd查看依賴,整整一頁。。。

重新編譯ImageMagick

既然要做一個便攜版本,用不上的模組就先儘可能去掉。另外靜態編譯需要先產生靜態庫,不過ImageMagick的預設選項就是同時產生靜態庫和動態庫,這樣也不需要加額外的參數了。

./configure --with-djvu=no --with-fontconfig=no --with-freetype=no \ --with-magick-plus-plus=no --with-openexr=no --with-pango=no \ --with-wmf=no --with-x=no

順便看看都是些什麼東西

  • AutoTrace - converts bitmap to vector graphics

  • DJVU 掃描格式,PDF的替代品

  • freetype 字型光柵化

  • lcms little color management system

  • lqr LiquidRescale

  • Pango 文字渲染

  • wmf windows 向量圖

  • OpenEXR exr格式

gopkg.in/gographics/imagick.v3/imagick

這是ImageMagick的golang sdk,其實就是cgo做了一個很薄的封裝。直接go build會自動調用pkg-config載入連結動態庫的參數,這裡要做靜態編譯,那就需要手動操作了。

編譯參數,直接pkg-config產生

export CGO_CFLAGS="`pkg-config --cflags MagickWand MagickCore`"

連結參數,還是pkg-config,看看依賴了些什麼

pkg-config --libs --static MagickWand MagickCore

將有環境依賴的庫配置為靜態編譯,其他的通用的庫維持動態庫連結不變。根據連結器的連結演算法,先發現符號引用,然後根據引用鏈入定義,應該把有依賴的庫放前面,被依賴的庫放後面。

export CGO_LDFLAGS="\-Wl,-Bstatic \    `pkg-config --libs MagickWand MagickCore` \     -ljbig -ltiff -ljpeg -lwebp -llzma -lfftw3 -lbz2 -lgomp \-Wl,-Bdynamic \    -llcms2 -llqr-1 -lglib-2.0 -lpng12 -lxml2 -lz -lm -ldl \"

清除編譯緩衝

rm -rf $GOPATH/pkg/linux_amd64/gopkg.in/gographics/imagick.v3

編譯時間加上no_pkgconfig的參數

go install -tags no_pkgconfig -v gopkg.in/gographics/imagick.v3/imagick

最後go build即可

相關文章

聯繫我們

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