2016-04-30 3 views
1

私はCGoを頻繁に使用するGoコードを作成しています。このコードは、を共有ライブラリまたは静的ライブラリにコンパイルする必要があります(静的が強く推奨されます)。 (code for referenceコードビルダーのリンカーエラーが発生します。手動でリンクすることはできますか?

これはLinuxでもMacでも問題なく動作しますが、Windowsではリンカ段階で4つのモード(c-shared、shared、c-archive、archive)が使用できないか、 go tool link -sharedは、ウィンドウに固有の指示がないことについて手作業で苦情を言います。

私の理解では、私は lib.a使用可能なを構築する必要があるすべては私がオブジェクトファイル(* .o)はに使用し、使用可能な静的ライブラリを生成するためにarを通してそれを置く場合、すべてをコンパイルするということです。

私はGoのリンカを完全にスキップでき、準備された.oファイルに基づいて、手動で.aを作成するかどうかです。

これが可能であれば、どうすればいいですか?

+0

これらの「準備済みの.o'ファイル」はどこで静的ライブラリを構築するのですか? Windowsの問題の詳細については、https://github.com/golang/go/issues/11058を参照してください。 – JimB

+0

@JimB .oファイルは、cgoを呼び出すときにGo自体から来ています。 '-x'引数を指定してサンプルコードを実行すると、フードの中にあるすべてのことが表示され、' go tool [tool] [arguments] 'を呼び出して' gcc [arguments] 'これはCGoコードで実行されるためです。 – AlexKey

+0

@JimBまた、あなたがリンクしている問題をまだ見ていれば、解決されていないことを意味します。しかし、私自身の答えで書くと、すべてを正常にコンパイルできるように、Goコードの最新のマスターブランチを構築しなければなりませんでした。 – AlexKey

答えて

0

Windowsのgccのように見えますが、必要な共有ライブラリを自動的に検出できません。この問題はGCCによって引き起こされたものであり、Goによるものではありませんでした。

現在のリリース(1.6.2)はwindows/amd64上の共有/静的ライブラリをサポートしていないため、Goをコンパイルするには自分でコンパイルしなければなりませんでした。

デフォルトの場所(C:\ Windows \ SysWOW64)の各共有ライブラリ(ntdll、winmmなど)でgccを手動でフィードすると問題が解決しました。

関連する問題