Я хочу использовать компилятор cygwin32 вместо mingw32. Согласно http://web.eecs.umich.edu/~sugih/courses/eecs487/glut-howto/glfw/, программы GLX gl на cygwin не работают с glfw. Поэтому я попытался использовать двоичные файлы mingw32 для glfw3 в cygwin32, что выдавало такие ошибки, как «GL_ARRAY_BUFFER» не было объявлено в этой области. Я решил это, связавшись с двоичными файлами mingw32 для glew32, что дало
/usr/include/w32api/GL/glu.h:68:79: ошибка: ожидается ')' перед токеном '*'
который я решил двумя разными способами, вместо этого используя glew, установленный cygwin, или связавшись с glew32s и вставив
#ifndef CALLBACK
#if defined(_ARM_)
#define CALLBACK
#else
#define CALLBACK __stdcall
#endif
#endif
#define GLEW_STATIC
Если бы я использовал glew32 вместо glew32s, он бы сказал undefined ссылку на 'glewInit', что мне нужно, чтобы остановить segfault прямо перед glCreateShader и после glfwMakeContextCurrent. Но этот метод дал предупреждение: разрешение _glewInit путем ссылки на _glewInit @ 0.
После всего этого у меня было много ошибок, таких как неопределенная ссылка на «glGenTextures» или «glDrawElements», которые я мог решить только путем ссылки на cygwin gl, который, как мне кажется, смешивает GLX с WGL. В соответствии с glewInit () не работает с "Отсутствующей версией GL", контекстом SDL2 OpenGL, компилятором cygwin, мне просто нужно переключиться на компилятор mingw32, который у меня уже есть, но я очень хочу использовать cygwin.
Если я использую команду cygwin gl (-lGL) с glew32s, она компилируется, запускается и выдает ошибку с помощью дампа стека в моем glGenBuffers (1, & ibo); в моем классе модели без ошибок glewinit ().
model(vectx* vecticesd, unsigned int* indicesd,int vectsized,int indsized,GLuint texidd) :
vecticesarr(vecticesd), indicesarr(indicesd),texid(texidd),vectsize(vectsized),indsize(indsized){
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vectsized, vecticesarr, GL_STATIC_DRAW);
glGenBuffers(1, &ibo); //here it crashes
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indsized, indicesd, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
Если вместо этого я использую glew cygwin, glewinit () вернет ошибку «Отсутствует версия GL». glfwMakeContextCurrent (окно); вызывается ДО glewinit () ;. Вот мои линкеры и их дублирование, поэтому заказы не имеют значения, ничего не меняли.
-lglfw3 -lglew32s -lopengl32 -lgdi32 -lGL
Я попробовал двоичные файлы mingw64 с cygwin64, и он дал «___vsnprintf not found», а -lntdll не исправил.
- добавлена дополнительная информация -
Я новичок в программировании, поэтому, пожалуйста, простите меня, если я скажу что-нибудь действительно глупое. Для тестового примера используйте код https://www.glfw.org/docs/3.0/quick.html. Я получаю черное окно с настройкой сборки cygwin32 и вращающийся треугольник с настройкой сборки mingw32. Я использую возвышенный текст в окнах, если это важно. Могу ли я использовать предварительно скомпилированные двоичные файлы для загрузки mingw32 с веб-сайта glfw или мне нужно использовать cmake с cygwin? Когда я попробовал cmake с cygwin, добавив cygwin / bin к пути к системной переменной окружения, он сказал: «Использование Win32 для создания окна», и как в cygwin / bin / make.exe, так и в gnu windows make сказали
[16%] Связывание исполняемого файла C boing.exe ../src/glfw3.lib(win32_monitor.c.obj):win32_monitor.c:(.text+0x77): неопределенная ссылка на `_imp__CreateDCW @ 16 ' ... еще ошибки
Если бы я вошел в cmakelist.txt в исходном коде glfw и заставил его использовать X11, он сказал бы «Использование X11 для создания окон», а затем сказал бы, что X11 / extensions / xf86vmode.h отсутствовал и для него не было пакета. в файле setup-x86.exe для cygwin. Я мог сделать что-то не так с cmake, но я не знаю. Я смог cmake, make и make install с mingw32 в качестве собственного компилятора в пути к системной переменной среды.
Я новичок в программировании, поэтому, пожалуйста, простите меня, если я скажу что-нибудь действительно глупое. Для тестового примера используйте код в glfw.org/docs/3.0/quick.html. Я получаю черное окно с моей настройкой cygwin32 и вращающимся треугольником с моей настройкой mingw32. Я использую возвышенный текст в окнах, если это важно. Могу ли я использовать предварительно скомпилированные двоичные файлы для загрузки mingw32 с веб-сайта glfw или мне нужно использовать cmake с cygwin? Я написал еще кое-что в разделе вопросов выше.
@matzeri: Я забыл вставить это уведомление в свой ответ.
У меня есть вращающийся цветной треугольник на cygwin 64 bit. Как вы создали библиотеку glfw для cygwin?
@matzeri Я не мог понять, как это построить. Я пробовал использовать cmake с cygwin.
@matzeri Я удалил файл cygwin / usr / include / GL / gl.h, и тестовый код glfw работал, но мой исходный код по-прежнему дает ту же ошибку. Я думаю, что теперь он связан с cygwin / usr / include / w32api / GL / gl.h, удалив другой.
Очень плохая идея. положить его обратно
Я подозреваю, что вы используете неправильные библиотеки, поэтому вот пошаговая инструкция о том, как это сделать на Cygwin. Конечно, вам нужно установить cmake, make, libGL-devel, xinit и xwin-xdg-menu
Чтобы запустить Xserver и X-терминал
На панели задач появятся два значка, нажмите на зеленый значок X и запустите Xterm.
Скомпилировать:
Загрузите исходный код из
https://www.glfw.org/download.html
$ unzip glfw-3.2.1.zip
$ cd glfw-3.2.1
$ cmake -DBUILD_SHARED_LIBS=ON .
$ make
$ make install
$ mv /usr/local/lib/cygglfw-3.dll /usr/local/bin/cygglfw-3.dll
mv
необходим, поскольку подходящее место для разделяемой библиотеки на Cygwin - это каталог bin
После этого пример можно скомпилировать с
$ gcc simple.c -o simple -lglfw -lgl -L/usr/local/lib
и запустить в Xterminal с
$ ./simple.exe
а это снимок
Чтобы собрать все образцы:
$ cd examples
$ cmake .
$ make
и все построены за один
$ ls *.exe
boing.exe heightmap.exe simple.exe wave.exe
gears.exe particles.exe splitview.exe
Комментарии не подлежат расширенному обсуждению; этот разговор был переехал в чат.
Комнаты, созданные модератором, автоматически предоставляют доступ всем участникам. См. chat.stackoverflow.com/rooms/info/185479/?tab=access
Смешивание cygwin и mingw - плохая идея. По поводу «не работать с glfw» вы можете проверить еще раз или сделать простой тест и спросить здесь или в списке рассылки cygwin. В остальном предоставьте STC (простой тестовый пример), иначе вам будет сложно помочь.