当前位置: 首页 > news >正文

Golang交叉编译

Golang交叉编译遇到的问题

  • 交叉编译
    • go支持的平台和版本

交叉编译

go支持的平台和版本

查询命令:

	go tool dist list

显示结果:

	aix/ppc64android/386android/amd64android/armandroid/arm64darwin/amd64darwin/arm64dragonfly/amd64freebsd/386freebsd/amd64freebsd/armfreebsd/arm64illumos/amd64ios/amd64ios/arm64js/wasmlinux/386linux/amd64linux/armlinux/arm64linux/loong64linux/mipslinux/mips64linux/mips64lelinux/mipslelinux/ppc64linux/ppc64lelinux/riscv64linux/s390xnetbsd/386netbsd/amd64netbsd/armnetbsd/arm64openbsd/386openbsd/amd64openbsd/armopenbsd/arm64openbsd/mips64plan9/386plan9/amd64plan9/armsolaris/amd64windows/386windows/amd64windows/armwindows/arm64
  1. golang 在跨平台编译时,只需要指定目标操作系统的 OS(GOOS="darwin")和 CPU 架构(GOARCH="amd64")
    
  2. 通过 go env -w GOARCH=xxx 来进行指定
    
  3. 在不需要引入 CGO 代码进行交叉编译时,需要指定 CGO_ENABLE=0
    
  4. 使用 CGO 代码时,必须指定 CGO_ENABLE=1
    
  5. 当 CGO_ENABLE=1 时,必须制定了交叉编译链,CC=gcc  和 CXX=g++
    
  6. 假设我们编译32位 mipsle 平台的程序,就要提前下载 mipsle 版本的c++交叉编译工具CGO_ENABLED=1 GOOS=linux GOARCH=mipsle CC="mipsel-linux-uclibc-gcc" CXX="mipsel-linux-uclibc-g++" go build xxx.go
    
  7. mips是big-endian的mips架构,mipsel是little-endian的mips架构
    
  8. 如果调用的 CGO 调用了 C 代码中的各种依赖库,那么在编译的时候回报依赖库 not found
    
  9. 解决方案是必须在编译时,加上指定的参数,链接的库必须交叉编译到目标平台的系统库而不是当前系统
    
  10. 主要是三个参数:-I , -isystem , -L 
    
  11. 例如:CGO_ENABLED=1 GOOS=linux GOARCH=mipsle CC=mipsel-linux-uclibc-gcc -Wall -std=c++11 -Llib -isystem/aarch64/usr/include -L/aarch64/lib -ldl -lpthread -Wl,-rpath-link,/aarch64/lib -L/aarch64/lib/aarch64-linux-gnu -L/aarch64/usr/lib -I/aarch64/usr/include -L/aarch64/usr/lib/aarch64-linux-gnu -ldl -lpthread -Wl,-rpath-link,/aarch64/usr/lib/aarch64-linux-gnu -lphonon -lcurl -lprotobuf go build xxx.go
    
  12. 尽量不要用 CGO ,会降低代码的可读性和交叉编译的复杂度,以及后期维护
    

相关文章:

Golang交叉编译

Golang交叉编译遇到的问题 交叉编译go支持的平台和版本 交叉编译 go支持的平台和版本 查询命令: go tool dist list显示结果: aix/ppc64android/386android/amd64android/armandroid/arm64darwin/amd64darwin/arm64dragonfly/amd64freebsd/386freebsd/…...

kafka3.x详解

kafka 一、简介1.1、场景选择,与其他mq相比1.2、应用场景1.2.1、流量消峰1.2.2、解耦1.2.3、异步通讯 1.3、消息队列的两种模式1.3.1、点对点模式1.3.2、发布/订阅模式 1.4、Kafka 基础架构 二、安装部署2.1、安装包方式2.2、docker安装方式2.3、docker安装kafka-ma…...

kubectl常用命令|pod生命周期|金丝雀发布|超详细

kubectl常用命令|pod生命周期|金丝雀发布|超详细 一 kubectl常用命令1.1 查看版本信息1.2查看资源对象简写1.3查看集群信息1.4 配置kubectl自动补全1.5node节点查看日志 二 k8s基本信息查看2.1 查看 master 节点状态2.2 查看命令空间2.3 创建和删除命名空间2.4 在命名空间kube-…...

【Linux系统】Linux进程信号详解

Linux进程信号 0 引言1 认识信号1.1 什么是信号1.2 发送信号的本质1.3 信号的处理 2 信号的产生2.1 键盘产生2.2 调用系统函数向进程发送信号2.3 由软件条件产生信号2.4 硬件异常产生信号 3 信号的保存4 信号的处理5 总结 0 引言 本篇文章会从Linux信号的产生到信号的保存&…...

阿里云u1服务器通用算力型CPU处理器性能测评

阿里云服务器u1通用算力型Universal实例高性价比,CPU采用Intel(R) Xeon(R) Platinum,主频是2.5 GHz,云服务器U1实例的基准vCPU算力与5代企业级实例持平,最高vCPU算力与6代企业级实例持平,提供2c-32c规格和1:1/2/4/8丰富…...

hive的详细使用文档和使用案例

目录 Hive 简介安装连接到Hive创建数据库创建表加载数据查询数据修改表删除表 使用案例结论 Hive 简介 Hive是一个基于Hadoop的数据仓库工具,可以将结构化数据映射到Hadoop HDFS上,并提供SQL查询功能。Hive的设计目标是让那些熟悉SQL语言的用户能够在Ha…...

KL散度

KL散度(Kullback-Leibler divergence),也称为相对熵(relative entropy),是用来衡量两个概率分布之间差异的一种指标。在机器学习中,KL散度常常用于度量两个概率分布之间的相似度或差异性。 具体…...

Java基础学习(16)多线程

Java基础学习多线程 一、多线程1.1 什么是多线程1.2 多线程的两个概念1.2.1 并发 1.3 多线程的实现方式1.4 多线程的成员方法1.5 线程的生命周期 二、线程安全1.6 同步方法1.7 锁lock1.8 死锁1.8 生产者和消费者 (等待唤醒机制)1.9 等待唤醒机制(阻塞队列方式实现)1…...

【一起啃书】《机器学习》第五章 神经网络

文章目录 第五章 神经网络5.1 神经元模型5.2 感知机与多层网络5.3 误差逆传播算法5.4 全局最小与局部极小5.5 其他常见神经网络5.6 深度学习 第五章 神经网络 5.1 神经元模型 神经网络是由具有适应性简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统…...

matlab实验二可视化

学聪明点,自己改,别把我卖了 一、实验目的及要求 要求 1、掌握 MATLAB常用的二维和三维绘图函数 2、掌握MATLAB的图形注释 3、熟悉MATLAB常用的图形修饰 4、熟悉MATLAB的图形动画 实验原理 1、MATLAB二维绘图:plot,fplot,fimplicit&#xf…...

(数据结构)栈的实现——再一次保姆级教学

目录 1. 栈 ​编辑 1.2 栈的实现 2. 代码的实现 2.1 初始化栈和销毁栈 2.2栈顶元素的插入 2.3栈顶元素的删除 栈元素删除 2.4栈顶元素的获取和栈元素的个数 1. 栈 1.1 栈的概念和结构 栈(Stack)是一种线性存储结构,它具有如下特点: &#xff0…...

【5G RRC】RSRP、RSRQ以及SINR含义、计算过程详细介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...

K8s(Kubernetes)学习(一):k8s概念及组件

Kubernetes中文文档:https://kubernetes.io/zh-cn/docs/home/ Kubernetes源码地址:https://github.com/kubernetes/kubernetes 一:Kubernetes是什么 首先要了解应用程序部署经历了以下几个时代: 传统部署时代:在物理服务器上运…...

Web3 常用语和黑话你知道吗?

My friend Dave used to be a bagholder, but he FOMO’d and bought even more BTC. Now, he’s a big whale HODLing for that moon. …that’s a lot to take in for just two sentences. If you’re new to Bitcoin and the world of cryptocurrencies, we understand if …...

物联网和边缘计算:如何将数据处理和决策推向设备边缘

第一章:引言 当我们谈论物联网(IoT)时,我们通常指的是将各种设备连接到互联网,并通过数据交换来实现智能化的网络。然而,传统的物联网模型通常涉及将数据发送到云端进行处理和分析。然而,随着技…...

【Android学习专题】java基本语法和概念(学习记录)

学习记录来自菜鸟教程 Java 变量 Java 中主要有如下几种类型的变量 局部变量 在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁类变量(静态变量) 类变量也声…...

Android系统启动全流程分析

当我们买了一个手机或者平板,按下电源键的那一刻,到进入Launcher,选择我们想要使用的某个App进入,这个过程中,系统到底在做了什么事,伙伴们有仔细的研究过吗?可能对于Framework这块晦涩难懂的专…...

RabbitMQ --- 惰性队列、MQ集群

一、惰性队列 1.1、消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。之后发送的消息就会成为死信,可能会被丢弃,这就是消息堆积问题。 解决消息堆积有三种…...

1.Buffer_Overflow-1.Basic_Jump

github上面的练习题 git clone https://github.com/Adamkadaban/LearnPwn 然后开始做 先进行 readelf 然后进行执行看看 是怎么回事 ./buf1发现就是一个输入和输出 我们checksec看看 发现stack 保护关闭 开启了NX保护 我们进入ida64看看反汇编 我习惯先看看字符串 SHITF…...

MySQL入门语法第三课:表结构的创建

数据表结构 定点数类型decimal(m,d) m表示数字总位数 d表示小数位数 ★创建数据表先要选择数据库 1 . CREATE TABLE 表名称 创建数据表 (字段名1 数据类型1 [,字段名2 数据名2] [, .....] ); 一个字段写一行 修改表名 alter table 旧表名 rename 新表名…...

【C语言】-自定义类型:结构体

🦆 个人主页:深邃- ❄️专栏传送门:《C语言》《数据结构》 🌟Gitee仓库:《C语言》《数据结构》 目录结构体类型的声明结构体回顾​结构的声明​结构体变量的创建和初始化结构的特殊声明匿名结构体类型结构的自引用结构…...

从AI Edge到Prime:拆解第二代Versal自适应SoC的端到端加速革新

1. Versal第二代自适应SoC的革新定位 当智能摄像头需要实时分析4K视频流中的数百个目标,当工业机械臂要在1毫秒内完成视觉定位和轨迹规划,传统嵌入式系统的算力瓶颈就暴露无遗。这正是AMD第二代Versal自适应SoC瞄准的战场——通过单芯片智能重构边缘计算…...

STC32G144K246做多协议网关?用FreeRTOS管理CAN-FD和USART的实战思路

STC32G144K246多协议网关实战:FreeRTOS下的CAN-FD与USART协同设计 工业现场的数据孤岛问题一直是自动化系统的痛点。不同厂商的设备可能采用Modbus、CANopen等异构协议,而STC32G144K246凭借其双CAN-FD接口和八组USART的硬件配置,配合FreeRTOS…...

智能合约开发框架

智能合约开发框架:加速区块链开发的利器 随着区块链技术的普及,智能合约已成为去中心化应用(DApp)的核心组件。智能合约开发涉及复杂的逻辑、安全性要求和底层技术细节,直接使用原生编程语言(如Solidity&a…...

如何用AntiDupl.NET快速清理电脑中的重复图片:终极免费解决方案

如何用AntiDupl.NET快速清理电脑中的重复图片:终极免费解决方案 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾为电脑里堆积如山的重复图片而烦恼…...

HarmonyOS NEXT能否打破“操作系统三分天下”?——生态博弈、开源进展与十年路线图深度解析

HarmonyOS NEXT能否打破“操作系统三分天下”?——生态博弈、开源进展与十年路线图深度解析2026年2月,中国智能手机市场传来一个令全球科技界震动的信号:鸿蒙操作系统国内市场份额突破18%,稳居第二,超越苹果iOS。同期&…...

3步打造专业级音频:Equalizer APO实战指南与音效优化

3步打造专业级音频:Equalizer APO实战指南与音效优化 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 你是否厌倦了Windows系统平淡无奇的音频体验?想要像专业音频工程师一样精准…...

基于Docker与BPMN.js的Activiti流程图云端部署实战

1. 从零认识Activiti与BPMN.js 如果你正在寻找一种简单高效的方式,将企业业务流程搬上云端,那么DockerBPMN.jsActiviti的组合绝对值得尝试。Activiti作为一款轻量级工作流引擎,能帮你把复杂的审批流程、任务流转自动化;BPMN.js则是…...

告别命令行!用FFMpegCore在C#里给视频加水印、转码、截图的保姆级教程

告别命令行!用FFMpegCore在C#里给视频加水印、转码、截图的保姆级教程 在当今视频内容爆炸式增长的时代,无论是社交平台、在线教育还是企业宣传,视频处理已成为开发者绕不开的技术需求。传统FFmpeg命令行工具虽然功能强大,但对于.…...

March7thAssistant:解放你的游戏时间,让《崩坏:星穹铁道》自动化管理

March7thAssistant:解放你的游戏时间,让《崩坏:星穹铁道》自动化管理 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 你是否曾因忙…...