记一次Mac(M1)交叉编译Windows系统的过程

做了一个导出文件项目来实践学习GO的成果,开发完成后,在本地调试环境一切正常,打包到Windows测试出现了报错Error: Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub。后研究得知,gorm的sqlite driver依赖cgo,所以需要开启CGO_ENABLED来启用CGO,但因为Mac(M1)的gcc编译器默认是clang,这个是Windows不支持的,所以开启了之后依旧无法解决问题。

解决方案

不依赖CGO进行交叉编译

浏览一下gorm的sqlite库的Issues和PRs,看到有很多人也遇到了相关的问题,并提出了使用纯GO实现sqlite的方案,详情可以关注以下链接:

  • https://github.com/go-gorm/sqlite/pull/161
  • https://github.com/go-gorm/sqlite/pull/93
  • https://github.com/go-gorm/sqlite/issues/35
  • https://github.com/go-gorm/sqlite/issues/160

但目前发布版本还没有实现。

更换为windows支持的gcc编译器

经过查阅,发现可以通过替换Windows支持的gcc编译器来解决问题,而MinGW-w64是著名的Windows版的gcc编译器,所以只要安装然后将GO的环境变量CC改为对应的编译器即可。

  1. 安装MinGW-w64,网上推荐的是通过homebrew安装的,但我无法搜索到。最后是通过MacPorts安装的,安装命令为sudo port install mingw-w64,详情在此。
  2. 修改GO的环境变量CC。命令为go env -w CC=x86_64-w64-mingw32-gcc
  3. 交叉编译

详情可以参考我的个人项目,如果对你有帮助,劳烦给项目点点赞。

总结

通过网上的教程顺利解决了交叉编译的问题,但对交叉编译和gcc编译器这一块的认识还是很肤浅的,需要进一步学习。

参考链接

  • go gorm 中Binary was compiled with ‘CGO_ENABLED=0’,…的问题
  • https://github.com/go-gorm/sqlite/issues
  • golang写了个小程序用到go-sqlite3如何编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何逃过极域的管控

本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-SA协议。 因此,若需转载/引用本文,请注明作者并附原文链接,且禁止删除/修改本段文字。 违者必究,谢谢配合。 个人主页:blog.csdn.net/jzw…

【Java框架】Spring框架(四)——Spring中的Bean的创建与生命周期

目录 SpringBean的创建步骤后置处理器(PostProcessor)BeanFactoryPostProcessorBeanPostProcessorInstantiationAwareBeanPostProcessorpostProcessBeforeInstantiationpostProcessAfterInstantiationpostProcessProperties SmartInstantiationAwareBeanPostProcessordetermine…

医疗大模型产品设计

医疗领域的大型模型可以涵盖许多功能点,以提供全面的医疗支持和解决方案。以下是一些可能的功能点设计: 1. **疾病诊断与预测**:利用机器学习算法和医疗数据对患者的症状进行诊断和预测,帮助医生提供更准确的诊断和治疗建议。 2…

如何采集opc服务器数据上传云端

为了进一步提高生产效率,生产制造的不断朝着智能化发展和升级,传统的自动化生产系统已经不能满足需求。传统的SCADA系统一般是用于现场的数据采集与控制,但是本地控制已经无法满足整个工厂系统智能化数字化的需求,智能化数字化是需…

呼叫系统的技术实现原理和运作流程,ai智能系统,呼叫中心外呼软交换部署

呼叫系统的技术实现原理和运作流程可以涉及多个组成部分,包括硬件设备、软件系统和通信协议。以下是一般情况下呼叫系统的技术实现原理和运作流程的概述: 硬件设备: 服务器:用于承载呼叫系统的核心软件和数据库。电话交换机&#…

《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)

1.简介 前面宏哥一连几篇介绍如何通过开源jar包Log4j.jar、log4j2.jar和logback实现日志文件输出,Log4j和logback确实很强大,能生成三种日志文件,一种是保存到磁盘的日志文件,一种是控制台输出的日志,还有一种是HTML格…

Docker 镜像仓库常见命令

Docker Registry (镜像仓库) 常用命令 docker login 功能:登录到一个 Docker 镜像仓库,如果没有指定镜像仓库的地址,默认就是官方的 Docker Hub 仓库。 语法: docker login [options] [server]选项: -u:登…

字母加密(C语言)

一、题目; 为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W…

<script>和<script setup>的区别

在Vue 3中&#xff0c;<script setup>是Composition API的一个语法糖&#xff0c;它提供了一种更简洁的方式来编写组件逻辑。使用<script setup>&#xff0c;您可以在组件外部直接导入或定义方法和响应式数据&#xff0c;而不需要在setup()函数内部进行。 <scr…

iframe嵌套页面 拒绝访问 X-Frame-Options配置

iframe嵌套页面 拒绝访问 X-Frame-Options配置 iframe拒绝访问 X-Frame-Options: deny X-Frame-Options: sameorigin X-Frame-Options: allow-from https://example.com/deny 表示该页面不允许在 frame 中展示&#xff0c;即便是在相同域名的页面中嵌套也不允许。 sameorigi…

[源码分享]基于Unity的Live2D虚拟人物——结合了GPT、Azure、情绪识别和口型同步,也可以集合苹果Vision Pro做成3D的形象

# 技术文档 ## 1 项目简介 ### 项目目录 ``` Assets ├─ Animator // 动画 ├─ Code // 代码 │ ├─ AI // AI 模块 │ │ ├─ LM // 语言模型模块 │…

notepad++的使用技巧

notepad的使用技巧_notpad垂直粘贴-CSDN博客 notepad的使用技巧 多视图 视图----移动/复制到当前文档-----移动到另一视图&#xff08;可以配合水平/垂直同步滚动功能&#xff09; 书签功能 在任意行点击左边栏或者按CtrlF2会出现蓝色小点&#xff0c;这表示添加了一个书签…

算法训练 | 使用JAX训练CLIP算法_支持fine-tuning

项目应用场景 面向 CLIP 算法训练场景&#xff0c;项目采用 JAX 来实现 CLIP 算法的训练&#xff0c;支持 fine-tuning。 项目细节 > 具体参见项目 README.md (1) 安装 pip install clip-jax (2) 下载训练数据 # clone and install datacomp# download data python downl…

基于Springboot+Vue的Java项目-网上购物商城系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

数仓建模—数据仓库初识

数仓建模—数据仓库初识 数据仓库之父Bill Inmon在1991年出版的"Building the Data Warehouse"一书中所提出的定义被广泛接受 数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的&#xff08;Subject Oriented&#xff09;、集成的&#xff08;Integ…

hv第一坑:定时器

错误代码 重试策略&#xff1a;一次延迟1s,最长30s直至事件成功。 int try_count 0;//do something if(not success)m_loop->setTimerInLoop((try_count > 30 ? 30: try_count) *1000 , cb, INFINITE, 0x100);表现现象 cpu 爆了内存爆了 总结原因 hv内部代码bug&…

C++异步回调示例:多线程执行任务,主线程通过回调监测任务状态

1、回调函数 回调函数定义&#xff1a;把函数的指针或者地址作为参数传递给另一个参数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;那么这就是一个回调的过程&#xff0c;这个被回调的函数就是回调函数。回调函数不是由该函数的实现方直接调用&#xff0c;而…

Ubuntu20.04 ISAAC SIM仿真下载使用流程(4.16笔记补充)

机器&#xff1a;华硕天选X2024 显卡&#xff1a;4060Ti ubuntu20.04 安装显卡驱动版本&#xff1a;525.85.05 参考&#xff1a; What Is Isaac Sim? — Omniverse IsaacSim latest documentationIsaac sim Cache 2023.2.3 did not work_isaac cache stopped-CSDN博客 Is…

相机1:如何系相机肩带

开始解锁新领域&#xff0c;多看几个相关视频&#xff0c;大概也就可以掌握一两种系相机肩带的方法&#xff0c;本质就是新知识的学习过程&#xff0c;不可能等着或者期待出来一个完整的教程&#xff0c;一步一步自己去探索&#xff0c;自己去查资料。 目录 总述 第一步&#…

chrome 浏览器 f12 如何查看 websocket 消息?

1. 打开目标页面 2. f12--》网络--》WS&#xff0c;然后刷新页面( 如果不刷页面&#xff0c;就会看不到 websocket 请求&#xff0c;因为 websocket 是长连接&#xff0c;页面加载后只发出一次连接请求&#xff0c;不像 http 接口&#xff0c;不用刷新页面&#xff0c;待会儿也…