11

Go プログラム内から OpenGL を使用しようとしています。すべての部品が揃っていると思いますが、まだ完全には実行できていません。

私の C コンパイラはmingw の 64 ビット版です。それは私の変数にあり、ドキュメント%PATH%の乱数の例で動作することを確認しました。cgo

\mingw\x86_64-w64-mingw32bin、lib、および include フォルダーをmingw-w64 インストールの同等のフォルダーにコピーして、64 ビット GLEW 1.9.0 をインストールしました。

を実行しようとするとgo get github.com/go-gl/gl、go は次のように応答します。

In file included from attriblocation.go:7:0:
gl.h:5:25: error: enumerator value for '__cgo_enum__5' is not an integer constant
 #define GLEW_GET_FUN(x) (*x)
                         ^
d:\programs\mingw64\x86_64-w64-mingw32\include\gl\glew.h:1956:26: note: in expansion of macro 'GLEW_GET_FUN'
 #define glVertexAttrib3f GLEW_GET_FUN(__glewVertexAttrib3f)
                          ^
gl.h:5:25: error: enumerator value for '__cgo_enum__6' is not an integer constant
 #define GLEW_GET_FUN(x) (*x)

これらのエラーは、 までの値に対して同様の方法で続きます__cgo_enum__15。また、エントリごとに Go 側からいくつかの一致エラーが発生します。

これを機能させるために何が欠けているかについてのアイデアはありますか?

編集: Go側からの「一致する」ログは次のとおりです。

attriblocation.go:42:2: error: initializer element is not constant
 func (indx AttribLocation) Attrib4fv(values *[4]float32) {
  ^
attriblocation.go:42:2: error: (near initialization for '__cgodebug_data[5]')
attriblocation.go:43:2: error: initializer element is not constant
  C.glVertexAttrib4fv(C.GLuint(indx), (*C.GLfloat)(&values[0]))
  ^
attriblocation.go:43:2: error: (near initialization for '__cgodebug_data[6]')
attriblocation.go:44:2: error: initializer element is not constant
 }

5 ~ 15ごとに 1 つあり__cgodebug_data[]ます。

編集 2:ログを添付するように求められました。GCC 4.8でコンパイルした場合は次のようになり、4.7 と 4.6 でコンパイルした場合は次のようになります。

4

1 に答える 1

3

これは Go の欠陥であり、C/Go コンパイラが相互に通信する方法に問題があるようです。回避策は、 を設定することCGO_CFLAGS=-ftrack-macro-expansion=0 go buildです。go-1.2rc5またはそれ以降を使用して問題を解決することもできます。このバグは、指定された以前の回避策/修正によりクローズされました

于 2013-05-20T14:20:28.887 に答える