由於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獲取軟件編譯時間。
/*
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進行開發,可以直接如下配置:
- File—Setting—Go—GOROOT;
- 將 go1.14.3.windows-amd64 的路徑添加到 GOROOT 中;
- 選中剛剛添加的環境,重新編譯程序即可通過。