linux 静态编译imagic,[golang] cgo项目如何编译便携版二进制文件

项目计划直接用二进制文件分发,本来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即可

https://blog.csdn.net/weixin_39955700/article/details/116669938

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值