2013-05-07 5 views
11

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

My C компилятор 64-bit version of 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 для каждой записи.

Любые идеи о том, что мне не хватает, чтобы заставить это работать?

Редактировать: Вот «подходящие» журналы из стороны в сторону.

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: Меня попросили прикрепить несколько журналов. Here is what happens when I compile with GCC 4.8, и Here is what I get with 4.7 and 4.6.

+0

Что вы имеете в виду с соответствующими ошибками? Можете ли вы опубликовать их также? – nemo

+0

Я добавил ошибки, которые, кажется, исходят из стороны Go в доме. –

+0

Попробуйте запустить 'go build -a -x' в' $ GOROOT/src/pkg/github.com/go-gl/gl' и вставьте строки, которые не включаются, в дополнение к сообщениям об ошибках, которые вы уже разместили. Это может помочь. – nemo

ответ

3

Похоже, что это дефект в Go и как компиляторы C/Go общаются друг с другом. Обходным путем является установка CGO_CFLAGS=-ftrack-macro-expansion=0 go build. Вы также можете использовать go-1.2rc5 или новее, чтобы исправить проблему. This bug has been closed with the previous workarounds/fixes specified.

+1

Это на самом деле дефект в go, а не go-gl. Нет ничего, что мог бы сделать, чтобы устранить проблему, поскольку это проблема компиляторов, разговаривающих друг с другом. – pwaller

+0

Вы правы! Ответ отредактирован для ясности. –

Смежные вопросы