使用Go语言编译互联网视频直播点播平台EasyDSS出现ld returned 1 exit status错误

2020-07-23 16:33:57 浏览数 (1)

由于Go语言非常易学,且代码精简,我们很多同事在研发视频平台的时候,都喜欢拿Go语言来做编程。我们之前也讲过关于GO语言编译的相关问题,比如:Go语言编程ioutil.ReadAll的用法注意点、go语言搭建重定向和反向代理的区别及使用等。

本文我们还讲一下Go 语言开发出现的其他问题,我们的编译人员使用Go语言编译EasyDSS时,出现“collect2.exe: error: ld returned 1 exit status”报错。

在开发过程中,升级 Go 版本后,编译代码出现一堆mingw64 错误,最后一句话为“collect2.exe: error: ld returned 1 exit status”。

原因分析

查看引起错误的代码为获取软件编译时间的代码导致的问题,这一段代码使用了Cgo获取软件编译时间。

代码语言:javascript复制
/*
const char* build_time(void)
{
    static const char* psz_build_time = `ls_date` " " `ls_time` ;
    return psz_build_time;
}
*/
import "C"

此段代码并无错误,经过上一次可编译版本,也未进行修改,初步推断为升级 Go 版本导致,怀疑Go版本与Cgo调用的gcc编译器不匹配导致。

查看 Go 环境为:

gcc 版本为:

两者对比,Go版本为32位版本,gcc为64位版本,32位版本的程序调用64位的编译器,导致出现此种问题。

解决办法:

在此我们为大家提出两种解决办法:

第一种是将下载32位版本的gcc编译器,可以使用。 第二种解决办法为使用64位版本的编译器,可以正常使用。

我采用是第二种解决办法,下载64位版本的Go语言开发环境go1.14.3.windows-amd64,其中amd64代表为64位程序,下载完毕后直接将对应的bin文件设置为环境变量即可。如果使用GoLand进行开发,可以直接如下配置:

  1. File—Setting—Go—GOROOT;
  2. 将 go1.14.3.windows-amd64 的路径添加到 GOROOT 中;
  3. 选中刚刚添加的环境,重新编译程序即可通过。

0 人点赞