[golang]如何在windows上使用cgo

一桶冷水 · · 5037 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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函数是非常有必要的。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:一桶冷水

查看原文:[golang]如何在windows上使用cgo

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

5037 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传