摘要:當我嘗試交叉編譯包含文件鏈某處C文件的.go源文件,我從Windows主機的AMD64,我得到:Go/Golang交叉編譯從Mac到Windows:致命錯誤:找不到'windows.h'文件
/usr/local/go/src/runtime/cgo/gcc_windows_amd64.c:8:10: fatal error: 'windows.h' file not found
Purely Go代碼似乎交叉編譯沒有錯誤;是否有一種方法可以在涉及C文件時獲取適當的頭文件進行交叉編譯?
更多詳細信息:我在我的Mac上安裝了LiteIDE,用於處理一些.go項目,LiteIDE使得將其他平臺作爲構建目標相對簡單。我在一個我有過的小測試項目上測試了它,純粹是Go,它似乎無誤地運行。
後來我在當前的大型項目上嘗試過它,並且必須在IDE中調整幾個env設置才能使其正常工作(在沒有啓用CGO的情況下對C文件提出投訴,即使設置爲.bash_profile,也沒有正確設置GOPATH並驗證回聲$變量就好了),結果是
/usr/local/go/src/runtime/cgo/gcc_windows_amd64.c:8:10: fatal error: 'windows.h' file not found
試圖目標Linux操作系統(OS的Linux,拱AMD64)給出
# runtime/cgo
ld: unknown option: --build-id=none
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我仔細檢查過我安裝的XCode。 GCC安裝:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr with-gxx-include- dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.3.0 (clang-703.0.29)
Target: x86_64-apple-darwin15.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
...,然後是最新版本:
go version go1.6.2 darwin/amd64
我也查了,這不只是從LiteIDE(因爲LiteIDE似乎忽略ENV設置和忽略什麼在終端?);在控制檯的例子試圖給出:
MyUsername$ env GOOS=windows GOARCH=amd64 CGO_ENABLED=1 go build -v
golang.org/x/net/html/atom
runtime/cgo
golang.org/x/crypto/ssh/terminal
golang.org/x/net/html
github.com/howeyc/gopass
# runtime/cgo
/usr/local/go/src/runtime/cgo/gcc_windows_amd64.c:8:10: fatal error: 'windows.h' file not found
github.com/andybalholm/cascadia
github.com/PuerkitoBio/goquery
我懷疑這是因爲應用程序使用的圍棋網絡庫,我覺得本機庫仍然調用一些C文件,填補了國內空白。有沒有一種方法可以在Linux/Windows上構建適當的庫,還是需要在目標平臺上完成才能工作?
在主機平臺上構建本地應用程序似乎沒有問題。
你鐺似乎相當過時的(你不實際上有gcc順便說一句,它'鐺聲)。 – OneOfOne
@OneOfOne檢查應用商店,它似乎是我可以使用的最新的Xcode? (不包括Xcode包括鏗鏘編譯器?) –
我不是100%確定Xcode版本,但看看你的gcc版本它說4.2。1,這是非常過時的,但無論如何,你將不得不安裝一個工具鏈,可以編譯Windows和/或Linux的本地C代碼。 如果全部失敗,您可能需要考慮設置適用於Linux和Windows的VM。 – OneOfOne