如何在 Ubuntu 上交叉编译 ARM 架构的 CGO 程序

本文详细介绍了如何在 Ubuntu 上进行 CGO 交叉编译,针对 32 位和 64 位 ARM 架构。在涉及 CGO 的情况下,除了设置 GOOS 和 GOARCH,还需要指定正确的 GCC 工具链。通过示例代码和编译步骤,展示了如何解决编译过程中遇到的问题,最终成功生成 arm 和 arm64 版本的动态库。
摘要由CSDN通过智能技术生成

我们都知道在不涉及 CGO 的时候,Go 的交叉编译非常简单,只需要设置对应的 GOOS 和 GOARCH 即可,但当涉及到 CGO 时,问题就变得有点复杂了,因为你需要指定特定的 GCC。

例如,想在 Ubuntu 上交叉编译一个带有 CGO 的动态库,目标 CPU 架构为 arm,我们该如何操作呢?

示例代码

# shared.go
package main

import "C"

//export Sum
func Sum(a, b int) int {
	return a + b
}

func main(){}

这个代码使用到了 CGO,然后暴露一个 Sum 方法,实现两个整数相加。

编译 32 位的 arm

因为通过设置 CGO_ENABLED=1 开启 CGO 编译,执行命令如下:

CGO_ENABLED=1 GOOS=linux GOARCH=arm go build -buildmode=c-shared -o share.so 

但不幸,命令报错: gcc: error: unrecognized command line option '-marm'

正如一开始我提到,交叉编译 CGO 需要选择特定的 arm 交叉编译工具,而 Ubuntu 上编译 32 位的 arm 可以使用 gcc-arm-linux-gnueabihf,安装命令如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值