惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
The GitHub Blog
The GitHub Blog
L
LangChain Blog
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
博客园 - Franky
阮一峰的网络日志
阮一峰的网络日志
GbyAI
GbyAI
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
V
V2EX
MyScale Blog
MyScale Blog

Razeen`s Blog

Let's Encrypt 推出 Gen Y 根证书架构:揭示 Web PKI 的五大未来趋势 通过 Wi-Fi 自动备份你的 iPhone 到 Nas 管理培训感悟:从技术视角看管理之路 UPS 一拖多:保护你的 NAS 和 Linux 服务器 从影音中心到 AI 助手:我的50款 Homelab 服务清单 从SSL证书有效期将缩短到47天聊开去 部署一个自己的 Running Page 谈谈特斯拉 Model Y 用车一年的感受和费用分析 弃用 Disqus 评论,使用自建 Waline 使用 Prometheus 和 Grafana 搭建你的证书监控面板 服务器迁移记:一次磁盘换板引发的Linux分区与挂载的学习 改善信息来源, 利用 RSS 高效获取资讯 (RSShub + Reeder5 + WeWe RSS) 多种 Docker 镜像拉取解决方案与实践 App分享 | AppCleaner - Mac上的卸载神器 Azure OpenAI API 申请和使用 如何开通 OneKey 虚拟信用卡,并充值消费 如何拥有一个可长期在国内使用的国外手机号码 分享开通 ChatGPT Plus 过程 如何开通 Depay 虚拟信用卡,并充值消费 如何开通欧易Web3钱包, 交易入账 如何5分钟内1块钱注册 ChatGPT 如何注册美区的 Apple ID (2023年/无需科学上网) NAS折腾记(11): NASTool3.0体验和降级 NAS折腾记(10): Docker版本的NASTool配置 NAS折腾记(9): NASTool与微信交互,微信发送消息远程下载电影【多图】 NAS折腾记(8):群晖安装 NASTool 实现影音半自动化【多图】 内网穿透(2):Tailscale 组网实现内网穿透,操作简单,无成本 内网穿透(1):总结了11中内网穿透的方式,总有一种适合你 NAS折腾记(7):从零开始设置(黑)群晖系统 NAS折腾记(6):黑群晖系统安装好后怎么洗白?
Golang CGO Mac 交叉编译 Windows
2017-08-13 · via Razeen`s Blog

有个小项目,使用sqlite3数据库,需要跨平台编译。我在Mac上开发的,现在编译一份windows平台的。

pre

编译的参数

GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH:目标平台的体系架构(386、amd64、arm) CGO_ENABLED: 是否开启CGO(事实证明交叉编译不支持CGO)

section 1

首先,我想到的是:

$ GOOS=windows GOARCH=386 CGO_ENABLED=1 go build  -o hello.exe

嗯,不出所料:

# runtime/cgo
gcc_libinit_windows.c:7:10: fatal error: 'windows.h' file not found

然后,google一下, fatal error: 'windows.h' file not found

嗯,stackoverflow,github…都瞄了一下,各种c库问题,各种解决方法参差不齐。

我这个人比较懒,决定换种解决方法。

section 2

联想到以前使用sqlite3项目需要交叉编译Linux平台的,我们采用过docker内编译的方法,我这里也尝试一下。

$ docker run --rm -i -v $GOPATH:/go  golang:1.11 bash
$ GOOS=windows GOARCH=386 CGO_ENABLED=1 go build  -o hello.exe

# runtime/cgo
gcc: error: unrecognized command line option '-mthreads'; did you mean '-pthread'?

还是存在问题。 那么继续Google一下。

在github go-sqlite3下我们发现有人提了相同的issue

有code反应,该如下解决:

$ apt-get update
$ apt-get install gcc-multilib
$ apt-get install gcc-mingw-w64

$ GOOS=windows GOARCH=386  CGO_ENABLED=1 CXX_FOR_TARGET=i686-w64-mingw32-g++ CC_FOR_TARGET=i686-w64-mingw32-gcc go build -o hello.exe

之后再次尝试,依然还是同样的问题。

section 3

Google一番未果,寻求同事帮助。

同事:“这问题我遇到过”

我:“怎么解决的”

同事: “没法解决,用sqlite3,mac上交叉编译不了win的”

我:“。。。”

同事:“装个Win虚拟机,直接在win上编译就OK了”

我:“。。。”

最后,顺利的在win虚拟机内编译成功该程序。

End