Использование двоичных файлов mingw32 glfw3 и glew32s в cygwin32 без смешивания cygwin X11 GLX с WGL

Я хочу использовать компилятор 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 в качестве собственного компилятора в пути к системной переменной среды.

Смешивание cygwin и mingw - плохая идея. По поводу «не работать с glfw» вы можете проверить еще раз или сделать простой тест и спросить здесь или в списке рассылки cygwin. В остальном предоставьте STC (простой тестовый пример), иначе вам будет сложно помочь.

matzeri 18.12.2018 12:18

Я новичок в программировании, поэтому, пожалуйста, простите меня, если я скажу что-нибудь действительно глупое. Для тестового примера используйте код в glfw.org/docs/3.0/quick.html. Я получаю черное окно с моей настройкой cygwin32 и вращающимся треугольником с моей настройкой mingw32. Я использую возвышенный текст в окнах, если это важно. Могу ли я использовать предварительно скомпилированные двоичные файлы для загрузки mingw32 с веб-сайта glfw или мне нужно использовать cmake с cygwin? Я написал еще кое-что в разделе вопросов выше.

Crayons4Dinner 18.12.2018 23:57

@matzeri: Я забыл вставить это уведомление в свой ответ.

Crayons4Dinner 19.12.2018 03:20

У меня есть вращающийся цветной треугольник на cygwin 64 bit. Как вы создали библиотеку glfw для cygwin?

matzeri 19.12.2018 03:45

@matzeri Я не мог понять, как это построить. Я пробовал использовать cmake с cygwin.

Crayons4Dinner 19.12.2018 03:55

@matzeri Я удалил файл cygwin / usr / include / GL / gl.h, и тестовый код glfw работал, но мой исходный код по-прежнему дает ту же ошибку. Я думаю, что теперь он связан с cygwin / usr / include / w32api / GL / gl.h, удалив другой.

Crayons4Dinner 19.12.2018 03:58

Очень плохая идея. положить его обратно

matzeri 19.12.2018 04:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
7
457
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я подозреваю, что вы используете неправильные библиотеки, поэтому вот пошаговая инструкция о том, как это сделать на 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

а это снимок

colored triangle

Чтобы собрать все образцы:

$ cd examples
$ cmake .
$ make

и все построены за один

$ ls *.exe
boing.exe  heightmap.exe  simple.exe     wave.exe
gears.exe  particles.exe  splitview.exe

Комментарии не подлежат расширенному обсуждению; этот разговор был переехал в чат.

Samuel Liew 19.12.2018 11:46

Комнаты, созданные модератором, автоматически предоставляют доступ всем участникам. См. chat.stackoverflow.com/rooms/info/185479/?tab=access

Samuel Liew 19.12.2018 11:57

Другие вопросы по теме