Golang在ARM架构下编译遇到的问题,求帮助
Golang在ARM架构下编译遇到的问题,求帮助 环境 CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 CC=arm-fsl-linux-gnueabi-gcc CXX=arm-fsl-linux-gnueabi-g++ go build -o xxxxxx .
构建时出现问题,每次都会提示: “ARM 外部链接器必须是 gold (issue #15696),但实际不是:collect2 版本 4.6.2 20110630 (预发布版) (ARM GNU/Linux with ELF)”
请问有人能帮助我吗?非常感谢。
你使用的是什么操作系统?你使用 TinyGo 吗?
更多关于Golang在ARM架构下编译遇到的问题,求帮助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
绝对不是,我在 i.mx6 平台上使用它,这是一款基于 ARM 的嵌入式芯片。
请确保您的操作系统已更新至最新版本 https://github.com/golang/go/issues/15696 您是在 Raspberry PI 2 上进行编译吗?
这个问题是由于Go在ARM架构下要求使用gold链接器,但你的工具链使用的是较旧的collect2链接器。以下是解决方案:
1. 检查gold链接器是否可用
arm-fsl-linux-gnueabi-ld --version | grep gold
2. 如果gold已安装但未默认使用,强制指定gold链接器
# 设置链接器标志
export CGO_LDFLAGS="-fuse-ld=gold"
# 或者直接指定gold链接器
export LD=arm-fsl-linux-gnueabi-ld.gold
3. 如果gold未安装,需要安装或构建gold链接器
# 对于Debian/Ubuntu系统
sudo apt-get install binutils-arm-linux-gnueabi
# 或者从源码构建gold
git clone https://sourceware.org/git/binutils-gdb.git
cd binutils-gdb
./configure --target=arm-fsl-linux-gnueabi --enable-gold=yes
make
sudo make install
4. 完整的构建脚本示例
#!/bin/bash
export CGO_ENABLED=1
export GOOS=linux
export GOARCH=arm
export GOARM=7
export CC=arm-fsl-linux-gnueabi-gcc
export CXX=arm-fsl-linux-gnueabi-g++
export CGO_LDFLAGS="-fuse-ld=gold"
export LD=arm-fsl-linux-gnueabi-ld.gold
go build -o xxxxxx .
5. 如果仍然有问题,可以尝试禁用CGO(如果项目允许)
export CGO_ENABLED=0
go build -o xxxxxx .
6. 检查工具链配置
# 查看链接器类型
arm-fsl-linux-gnueabi-gcc -print-prog-name=ld
# 查看可用链接器
ls /usr/arm-fsl-linux-gnueabi/bin/ | grep ld
主要问题是ARM架构的Go编译要求gold链接器来确保正确的TLS(线程本地存储)处理。collect2是GCC的旧版包装器,不支持Go的ARM TLS要求。

