錯誤現象
幾周前,突然發現我的go 項目編譯開始報一種以前從來沒有出現過的錯誤:
# runtime/cgo
clang: warning: argument unused during compilation: '-pthread'
# runtime/cgo
clang: error: no such file or directory: 'libgcc.a'
需要說明下:我的開發機器是mac mini,系統當時是10.8.5, 上周升級為mavericks。
問題進一步探索
剛出現時我有點慌,當然上了google,查出一大堆結果,答案五花八門,一一試過都不能解決,這下我慌了——畢竟go語言是一門新語言,而apple又是google的“死敵”! 我進一步發現,我用 go build -a 就會報這個錯誤,否則不報這個錯誤。這就有些蛋疼了: + 我修改了某個包 + 在引用了它的程序里會用它原來的包(在 $GOPATH/pkg/darwin_amd64/ 下),以前用go build -a 就可以保證是最新的(加上 -a 參數會對引用的包重新編譯),但現在會報錯,於是我只能手動刪除 $GOPATH/pkg/darwin_amd64/ (后來我寫了一個腳本),然后再編譯。
在寫了清包腳本和編譯腳本后,我就將這事暫時放下了。
問題加劇,不解決不行了
今天早上我需要編譯一個linux和Windows版本,於是就到 $GOROOT/src 下執行:
$ sudo CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash
$ sudo CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash
這兩個命令都報錯了,在編譯到runtime/cgo 時!問題也是clang 出錯。 更令我上火的是,我發現不論在什么情況下 go build 也報文章開頭的錯誤了,這下我只能又一次google。結果與三周前一樣一樣的。
問題回溯
我在舉手無措時,回想幾周前出現這個問題我的電腦裝了些什么東西呢?我想到那天進行了Xcode 5 的升級。一想到這,我就幾乎斷定就是xcode5 引起的了。因為xcode是用clang 進行編譯的。於是google : upgrade xcode 5 golang warning: argument unused during compilation: ' "-pthread" ,進入到 Mac XCode 5 build problem 看了下,里面提到重新安裝go 1.2rc3 就解決了。我依葫蘆畫瓢,下載golang1.2rc3 ,安裝,測試,終於正常了!
總結
寫這篇blog有兩個目的: 1. 我相信很多golanger 都會遇到這個問題,而golang 1.2rc3 才發布沒有多久,或許有些朋友還不知道,寫此文已做提醒。 2. 提醒自己對待 “愛機” 像寫程序一樣細心。