背景
在对一个开源的Go程序二次开发 重新编译时 ,
报错截图如下
报错文字如下:关键信息 link: running gcc failed: exit status 1
$ go build -o orchestrator-didi -i go/cmd/orchestrator/main.go
go build: -i flag is deprecated
# command-line-arguments
/data/scripts/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/bin/ld: /tmp/go-link-650714850/000024.o: unrecognized relocation (0x2a) in section `.text'
/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
查看了Go的GitHub上的issue
记录该问题
https://github.com/golang/go/issues/43996
问题原因 :
编译器或链接器版本可能不兼容或过时
我的原因可能是因为没有安装glibc-static 这个包
自己解决
yum install gcc
yum install glibc-static
yum install binutils
这两个包解释
glibc-static
是一个包含 GNU C 库(glibc)的静态链接版本的软件包。GNU C 库是 Linux 系统中最基本的 C 库之一,它提供了许多标准 C 库函数的实现,如内存分配、字符串操作、文件操作等。
静态链接版本的 glibc
允许开发者将库的代码和数据嵌入到他们的可执行文件中,这意味着在运行时不需要依赖系统上已安装的动态链接版本的 glibc
。这对于构建独立的可执行文件或者在某些情况下确保程序的兼容性和可移植性非常有用。
通常情况下,glibc-static
包含了静态链接版本的 libc.a
等库文件,您可以在编译时链接到您的程序中。
binutils
是一组工具,用于处理可执行文件、目标文件和库。这些工具包括链接器(ld)、汇编器(as)、目标文件复制工具(objcopy)、符号表工具(nm)等。binutils
可以在构建软件时执行许多任务,如链接不同的目标文件以创建可执行文件、将可执行文件拆分成独立的目标文件等。
gcc
是 GNU Compiler Collection 的缩写,它是一套包括编译器在内的工具集,用于编译和链接程序。gcc
最常用于编译 C 和 C++ 程序,但它也支持其他编程语言,如 Fortran、Objective-C、Ada 等。
gcc
提供了一系列命令行选项,用于控制编译器的行为,例如指定输出文件名、优化级别、预处理器定义等。它还包含了多个编译器前端和后端,以支持不同的源语言和目标平台。
重新编译成功
参考
Go编译 报错 link: running gcc failed: exit status 1_c:\program files (x86)\go\pkg\tool\windows_386\lin-CSDN博客