Linux Golang Cgo编译
与 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/000
与 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
文件,请检查是否含有这些文件,然后删除后重新运行。
连接错误 未识别区域(.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
更多推荐
所有评论(0)