博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[golang]如何在windows上使用cgo
阅读量:6039 次
发布时间:2019-06-20

本文共 788 字,大约阅读时间需要 2 分钟。

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

转载地址:http://pnlhx.baihongyu.com/

你可能感兴趣的文章
挖掘你不知道的windowsxp中的带宽潜能
查看>>
Software Engineering 招聘要求
查看>>
【转载】InstallAnyWhere自动化制作安装包的知识
查看>>
69、iSCSI共享存储配置实战
查看>>
文本编程
查看>>
乔布斯走了。你还期待苹果吗?
查看>>
优先级
查看>>
Tomcat与Web服务器、应用服务器的关系
查看>>
用DFS实现全排列 & 八皇后问题
查看>>
深度学习博客
查看>>
Android总结篇系列:Android Service
查看>>
Android dumpsys命令的使用
查看>>
Linux Kernel系列一:开篇和Kernel启动概要
查看>>
BZOJ 2756: [SCOI2012]奇怪的游戏 网络流/二分
查看>>
master + worker模式的node多核解决框架——node-cluster
查看>>
Android如何实现超级棒的沉浸式体验
查看>>
使用node打造自己的命令行工具方法教程
查看>>
Express代理中间件问题与解决方案
查看>>
||和&&返回什么?
查看>>
linux在文件中查找指定字符串,然后根据查找结果来做进一步的处理
查看>>