2016-04-28 30 views
0

概要:ファイルチェーンのどこかにCファイルを含む.goソースファイルをクロスコンパイルしようとするとMacOSの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 

純粋にGoコードがエラーなしでクロスコンパイルされているようだ。 Cファイルが含まれているときにクロスコンパイル用の適切なヘッダファイルを取得する方法はありますか?

詳細::私はいくつかの.goプロジェクトで作業するためにMacにLiteIDEをインストールしました.LiteIDEは他のプラットフォームをビルドターゲットとして比較的簡単にターゲット設定することができます。私が持っていた小さなテストプロジェクトでそれをテストしました。純粋にGoです。エラーなく実行されたようです。

後で私は現在のより大きなプロジェクトでそれを試し、IDEでいくつかのenv設定を調整しなければなりませんでした(CGOが有効になっていないCファイルについての苦情とGOPATHは.bash_profile 。そして

/usr/local/go/src/runtime/cgo/gcc_windows_amd64.c:8:10: fatal error: 'windows.h' file not found 

は、Linux(OSのLinuxでは、アーチAMD64)をターゲットにしようとしているエコー$変数にうまく検証)の結果は、私は二重の私はXCodeのインストールされているチェックしました

# runtime/cgo 
ld: unknown option: --build-id=none 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

を与えます。私もLiteIDEはENVの設定を上書きし、何を無視するようですので、これはLiteIDE(からわずかではないことを確認

go version go1.6.2 darwin/amd64 

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が最新バージョンである:GCCがインストールされていますターミナルに?);コンソールでの例の試みが得られます。

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でビルドするための適切なライブラリを入手する方法はありますか?これを動作させるにはターゲットプラットフォーム上で行う必要がありますか?

ホストプラットフォーム上のネイティブアプリケーションを構築することは問題なく動作するようです。

+0

あなたの打ち鳴らすはむしろ時代遅れのようです(あなたドン実際にはgcc btwを持っていない、 s clang)。 – OneOfOne

+0

@OneOfOneアプリストアをチェックすると、それは私にとって利用可能な最新のXcodeのようですか? (Xcodeにはclangコンパイラが含まれていませんか?) –

+0

Xcodeのバージョンについては100%確信していませんが、あなたのgccのバージョンは4.2です。1は非常に古くなっていますが、WindowsやLinux用のネイティブCコードをコンパイルできるツールチェーンをインストールする必要があります。 すべてが失敗した場合、LinuxおよびWindows用のVMの設定を調べることができます。 – OneOfOne

答えて

6

CGOのクロスコンパイルを有効にするには、そのターゲットのCコードをコンパイルできるローカルツールチェーンが必要です。

私は、Mac OS Xに非常に慣れていないんだけど、アーチLinux上で私がしなければならなかったすべてはmingw-w64-toolchainをインストールして、私の行くコードをコンパイルした:だからあなたはどのようにに見たいと思うかもしれません

env GOOS="windows" GOARCH="386" CGO_ENABLED="1" CC="i686-w64-mingw32-gcc" go build 
// or to target win 64 
env GOOS="windows" GOARCH="amd64" CGO_ENABLED="1" CC="x86_64-w64-mingw32-gcc" go build 

しかし、ld: unknown option: --build-id=noneはバグのように思える他のエラーメッセージについてOS X上で

をmingwの(または同様の何かを得る、あなたが行くissueトラッカーにそれを報告することがあります。

関連する問題