我想使用cygwin32编译器而不是mingw32。根据{{3}},cygwin上的gl的GLX程序不适用于glfw。因此,我尝试在cygwin32中使用glfw3的mingw32二进制文件,它给出了类似“ GL_ARRAY_BUFFER”的错误,但未在此范围内声明。我通过链接glew32的mingw32二进制文件解决了这个问题,
/usr/include/w32api/GL/glu.h:68:79:错误:'*'标记之前的预期')'
我解决了两种不同的方法,改为使用cygwin安装的glew或链接到glew32s并粘贴
#ifndef CALLBACK
#if defined(_ARM_)
#define CALLBACK
#else
#define CALLBACK __stdcall
#endif
#endif
#define GLEW_STATIC
如果我使用glew32而不是glew32s,它将表示对“ glewInit”的未定义引用,我需要在glCreateShader之前和glfwMakeContextCurrent之后停止segfault。但是此方法给出了警告:通过链接到_glewInit @ 0来解决_glewInit。
毕竟,我遇到了很多错误,例如未定义引用'glGenTextures'或'glDrawElements',这些错误只能通过链接到cygwin的gl来解决,我认为这是将GLX与WGL混合使用。 根据 http://web.eecs.umich.edu/~sugih/courses/eecs487/glut-howto/glfw/,我应该切换到已经使用过的mingw32编译器,但是我真的想使用cygwin。
如果我将cygwin的gl(-lGL)与glew32s一起使用,它将在我的glGenBuffers(1,&ibo);上通过stackdump进行编译,运行和segfaults。在我的模型类中没有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(window);在glewinit();之前被称为。 这是我的链接器,并将它们加倍,因此顺序无关紧要,没有任何改变。
-lglfw3 -lglew32s -lopengl32 -lgdi32 -lGL
我用cygwin64尝试了mingw64二进制文件,并且给出了“ ___vsnprintf not found”,而-lntdll无法修复它。
-添加了更多信息-
我是编程的新手,所以如果我说什么很愚蠢,请原谅我。对于测试用例,请使用glewInit() fails with "Missing GL version", SDL2 OpenGL context, cygwin compiler处的代码。我的cygwin32构建设置得到一个黑色的窗口,而我的mingw32构建设置得到一个旋转的三角形。如果重要的话,我在Windows上使用了崇高的文字。我可以使用从glfw网站下载的mingw32的预编译二进制文件,还是必须将cygwin与cygwin一起使用?当我通过向环境系统变量路径中添加cygwin / bin来尝试与cygwin进行cmake时,它说“使用Win32进行窗口创建”,而cygwin / bin / make.exe和gnu窗口都使
[16%]链接C可执行文件boing.exe ../src/glfw3.lib(win32_monitor.c.obj):win32_monitor.c:(.text+0x77):对'_imp__CreateDCW @ 16'的未定义引用 ...更多错误
如果我进入glfw源中的cmakelist.txt并强制其使用X11,它会说“使用X11进行窗口创建”,然后说X11 / extensions / xf86vmode.h丢失了,并且没有将其打包在cygwin的setup-x86.exe中。我可能会用cmake做一些非常错误的事情,但是我不知道。我能够使用mingw32作为环境系统变量路径中的本机编译器进行安装,制作和安装。
答案 0 :(得分: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
,因为bin
目录是Cygwin上共享库的正确位置
之后,可以使用
$ 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