与 i386 输出不兼容

/usr/local/go/pkg/tool/linux_386/link: running gcc failed: exit status 1
/usr/bin/ld: i386:x86-64 架构于输入文件 /tmp/go-link-175888364/000000.o 与 i386 输出不兼容
/usr/bin/ld: /tmp/go-link-175888364/000007.o: 未识别的重定向 (0x2b),位于 `.text' 区
/usr/bin/ld: 最后的链结失败: 错误的值
collect2: error: ld returned 1 exit status

该文件是由于在编译目录总可能存在 x86-64 的rsrc.syso 文件,请检查是否含有这些文件,然后删除后重新运行。

[1]. golang . issue . cmd/link: incompatible with i386:x86-64 output . https://github.com/golang/go/issues/12448

连接错误 未识别区域(.text)

Cgo在编译时提示如下错误:

/usr/local/go/pkg/tool/linux_386/link: running gcc failed: exit status 1

# git.hzauth.com/gmsslvpn/unisign-tlcp-pxy
/usr/local/go/pkg/tool/linux_386/link: running gcc failed: exit status 1
/usr/bin/ld: /tmp/go-link-2567881700/000006.o: 未识别的重定向 (0x2b),位于 `.text' 区
/usr/bin/ld: 最后的链结失败: 错误的值

有下面几种方案

  • 关闭编译器优化参数
  • 重新编译Go源码

方法一 关闭连接参数

Go编译时加上 -gcflags="all=-N -l" 参数

例如:

go build -gcflags="all=-N -l" .
  • gcflags:设置编译时的标志
  • all:表示 GOPATH 中的所有包。如果在 modules 模式下,则表示主模块和它所有的依赖,包括 test 文件的依赖

编译参数:

  • -N:禁止编译器优化
  • -l:关闭内联(inline)

更多参数可以通过 go tool compile -help 查看 [5]

若该方法任然无法解决,请使用方法二

方法二 编译Go源码

该问题通常是由于使用从的预构建 Go SDK 编译CGO时发生,错误如下:

/usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/usr/bin/ld: /tmp/go-link-642826874/000006.o: unrecognized relocation (0x2a) in section `.text'
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

操作系统内安装binutils 版本过低 ,因为新的GO SDK编译所使用的版本较高。

如何解决?

自己编译go源码,构建自己的GO SDK

编译源码得需要安装Go程序,可以先从官方下载SDK按照官方教程安装Go程序,然后再执行编译。

在这里插入图片描述

go1.10.8版本为例:

下载源码

wget https://go.dev/dl/go1.10.8.src.tar.gz

解压并编译

tar zxvf go1.10.8.src.tar.gz
cd go/src/
./all.bash

看见如下字样说明编译成功

ALL TESTS PASSED

---
Installed Go for linux/amd64 in /home/you/go.
Installed commands in /home/you/go/bin.
*** You need to add /home/you/go/bin to your $PATH. ***

按照流程配置golang的环境变量后问题解决。

[1]. github . golang . issue . running gcc failed: exit status 1 .https://github.com/golang/go/issues/44703
[2]. github . golang . issue . x/build: document that Ubuntu 14.04 doesn’t meet minimum requirement for Go 1.16 binary release . https://github.com/golang/go/issues/43996
[3]. golang . source install . https://go.dev/doc/install/source
[4]. Go gcflags/ldflags 的说明 . bwangel . 2022.01 .https://www.bwangel.me/2022/01/12/go_gcflags/
[5]. golang . compile . https://pkg.go.dev/cmd/compile

Logo

更多推荐