使用Go語言編譯互聯網視頻直播點播平臺EasyDSS出現ld returned 1 exit status錯誤

由於Go語言非常易學,且代碼精簡,我們很多同事在研發視頻平臺的時候,都喜歡拿Go語言來做編程。我們之前也講過關於GO語言編譯的相關問題,比如:Go語言編程ioutil.ReadAll的用法注意點go語言搭建重定向和反向代理的區別及使用等。

EasyDSS 2.5D.png

本文我們還講一下Go 語言開發出現的其他問題,我們的編譯人員使用Go語言編譯EasyDSS時,出現“collect2.exe: error: ld returned 1 exit status”報錯。

在開發過程中,升級 Go 版本後,編譯代碼出現一堆mingw64 錯誤,最後一句話爲“collect2.exe: error: ld returned 1 exit status”。

原因分析

查看引起錯誤的代碼爲獲取軟件編譯時間的代碼導致的問題,這一段代碼使用了Cgo獲取軟件編譯時間。

/*
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 環境爲:

488.png

gcc 版本爲:

489.png

兩者對比,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. 選中剛剛添加的環境,重新編譯程序即可通過。

490.png

DSS4.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章