Использование OpenGL от Go

Я пытаюсь использовать OpenGL из программы Go. Я думаю, что у меня есть все штуки на месте, но я все еще не в состоянии заставить его работать.

Мой компилятор C - это 64-разрядная версия mingw. Это в моей переменной %PATH%, и я проверил ее работу с примером случайного числа в документации cgo.

Я установил 64-разрядный GLEW 1.9.0, скопировав папки bin, lib и include в эквиваленты \mingw\x86_64-w64-mingw32 в моей установке mingw-w64.

Когда я пытаюсь запустить 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.

Ответ 1

Похоже, что это дефект в Go и как компиляторы C/Go связывают друг с другом. Обходным путем является установка CGO_CFLAGS=-ftrack-macro-expansion=0 go build. Вы также можете использовать go-1.2rc5 или новее, чтобы исправить проблему. Эта ошибка была закрыта с предыдущими обходными решениями/исправлениями, указанными.