11

我正在尝试在 Go 程序中使用 OpenGL。我我已经准备好了所有的部分,但我仍然不能让它运行起来。

我的 C 编译器是64 位版本的 mingw。它在我的%PATH%变量中,并且我已经验证它与cgo文档中的随机数示例一起使用。

\mingw\x86_64-w64-mingw32我通过将 bin、lib 和 include 文件夹复制到我的 mingw-w64 安装中的等效文件夹来安装 64 位 GLEW 1.9.0 。

当我尝试运行go get github.com/go-gl/gl时,请回复以下内容:

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
 }

__cgodebug_data[]每5-15个就有一个。

编辑 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 回答