Использование бинарных файлов mingw32 glfw3 и glew32s в cygwin32 без смешивания cygwin X11 GLX с WGL - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу использовать компилятор 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, он сказал бы неопределенную ссылку на 'glewInit', что мне нужно, чтобы остановить segfault прямо перед glCreateShader и после glfwMakeContextCurrent.Но этот метод дал предупреждение: разрешение _glewInit путем ссылки на _glewInit@0.

После всего этого у меня появилось много ошибок, таких как неопределенная ссылка на 'glGenTextures' или 'glDrawElements', которые я мог решить, только связавдля cygwin's gl, который, я думаю, смешивает GLX с WGL.Согласно glewInit () завершается с ошибкой «Отсутствует версия GL», контекст SDL2 OpenGL, компилятор cygwin , я должен просто переключиться на компилятор mingw32, который у меня уже работает, но я действительно хочу использовать cygwin.

Если я использую cygwin's 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);
}

Если я использую вместо этого cygwin glew, glewinit () возвращает ошибку «Missing GL version».glfwMakeContextCurrent (окно);называется ДО glewinit () ;.Вот мои компоновщики и их удвоение, так что порядок не имеет значения, ничего не изменилось.

 -lglfw3 -lglew32s -lopengl32 -lgdi32 -lGL

Я попробовал двоичные файлы mingw64 с помощью cygwin64, и он выдал «___vsnprintf not found» и -lntdll didn 'не могу это исправить.

- добавил больше информации -

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

1 Ответ

0 голосов
/ 19 декабря 2018

Я подозреваю, что вы используете неправильные библиотеки, так что пошагово, как это сделать на Cygwin.Вам, конечно, нужно установить cmake, make, libGL-devel, xinit и xwin-xdg-menu

Для запуска Xserver и X-терминала

enter image description here

На панели задач появятся два значка, выберите зеленый X и запустите Xterm.

enter image description here

Для компиляции:
Загрузите исходный код с 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, так как для Cybwin необходимо указать 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
...