Opengl 在Cygwin下编译最小GLEW应用程序 让我们考虑下面的程序,试着在CygWin下面编译: #include <GL/glut.h> int main(int argc, char** argv) { glutInit(&argc, argv); glLoadIdentity(); }

Opengl 在Cygwin下编译最小GLEW应用程序 让我们考虑下面的程序,试着在CygWin下面编译: #include <GL/glut.h> int main(int argc, char** argv) { glutInit(&argc, argv); glLoadIdentity(); },opengl,cygwin,glew,Opengl,Cygwin,Glew,现在, 失败了。 如何构建第二个应用程序 弗斯特 有几种方法可以从NVIDIASDK构建glew by:by VS、by cygwin、by cygwin和-D_WIN32。我还尝试了从源代码中构建原始glew的cygwin VS构建提供 /cygdrive/c/DOCUME~1/kelebron/LOCALS~1/Temp/ccErbecl.o:test.cpp:(.text+0xa8): undefined reference to `_glLoadIdentity' collect2: l

现在,

失败了。 如何构建第二个应用程序

弗斯特 有几种方法可以从NVIDIASDK构建glew by:by VS、by cygwin、by cygwin和-D_WIN32。我还尝试了从源代码中构建原始glew的cygwin

VS构建提供

/cygdrive/c/DOCUME~1/kelebron/LOCALS~1/Temp/ccErbecl.o:test.cpp:(.text+0xa8): undefined reference to `_glLoadIdentity'
collect2: ld returned 1 exit status
cygwin构建提供了许多

../lib/cygwin/glew32.lib(glew.o):glew.c:(.text+0x38e): undefined reference to `_glXGetProcAddress'
带有-D_WIN32的cygwin根本不编译(我有点受它的影响)

第二 似乎有两种方法可以链接到OpenGL
使用-L/lib/w32api
或者使用-L/usr/X11R6/lib-lX11-lXi-lXmu


但是,-L指令没有改变任何东西。我有/usr/lib/w32api/libopengl32.a,但可能缺少X11版本(/usr/X11R6/lib/libGL?)。我应该在Cygwin中包含什么包?我已经安装了所有从libGL开始的库(不仅仅是…。

听起来您想链接到本机Win32库,而不是X11。添加-L/lib/w32api。否则,您需要针对X11库(-L/usr/X11R6/lib-lX11-lXi-lXmu)进行链接,以消除glX*链接器错误。

我不久前遇到过类似问题,我发现有两种方法可以在Cygwin下编译opengl代码。
针对本机Win32 API库glut32 glu32 opengl32(也称glui)的第一个链接。 那些比较老:
glut v3.7.6
opengl v1.1
glui 2.11

第二种方法使用X11库glut glu gl。它们的头文件中有较新的版本号(请注意,使用GL扩展需要>v1.2):
glut v4(自由glut)
opengl v1.3
glext
...

因此,要使用comile的第一个选项:-I/usr/include/opengl
并链接到:-lglut32-lGLU32-lOpenGL32

要使用X11版本,请使用编译:-I/usr/include/(默认情况下包括)
并链接到:-lglut-lGLU-lGL(注意区别)
您可以添加X11标题和库,但我猜它们包含在GL标题和库中。
-I/usr/X11R6/include
-L/usr/X11R6/lib-lXmu-lXi-lXext-lX11


在Cygwin安装程序中,您可以选择以下软件包:
opengl——提供win32版本的opengl、glut、glui
libglut-devel--X11版本的glut(freeglut),这也将选择所有依赖的包。(glproto,libGL-libGLU,libX11,…)
我还建议包括Xorg服务器,因为您需要一台X服务器。


希望这有帮助。

以前的建议对你有用吗

我不清楚您在链接或编译GLEW时是否面临问题。我通过包含源代码使用GLEW,并且在过去通过链接使用过

如果您想编译GLEW,那么请确保选择正确的zip,因为使用基于*nix的代码的脚本可能无法在windows下正确运行(不确定Cygwin)


GLEW应该是标题和链接顺序中的第一个

为了确保我们讨论的是同样的问题,下面是我曾经得到的信息

$g++-o glew_test.exe glew_test.cpp-lglut32-lglew32
c:\Users\Fredrik\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0x1c):对“glutInitWithExit”的未定义引用
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0x37):对“\uu glutCreateWindowWithExit”的未定义引用
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0x53):对“\uu glutCreateMenuWithExit”的未定义引用
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0x9e):对“glutInitDisplayMode”的未定义引用
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0xb2):对“glutInitWindowPosition”的未定义引用
c:\Users\Fredrik\AppData\Local\Temp/ccgSNdfr.o:
glew_test.cpp:(.text+0xc6):对“GLUTinitWindowsSize”的未定义引用
collect2:ld返回了1个退出状态

以下几页帮助我解决了这个问题。
  • glew.sourceforge.net/install.html

基本上,我必须在文件的开头定义_STDCALL_SUPPORTED和_M_IX86,并在glew.h之前包含windows.h

然后我使用了标志-lglut32-lglew32

如果您想尝试一下,以下是来源:

#define _STDCALL_SUPPORTED
#define _M_IX86
#include <windows.h>
#include <GL/glew.h>
#include <GL/glut.h>
#include <cstdio>

int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutCreateWindow("MM 2004-05");
    glewInit();
    if (glewIsSupported("GL_VERSION_2_0"))
        printf("Ready for OpenGL 2.0\n");
    else {
        printf("OpenGL 2.0 not supported\n");
    }
    return 0;
}
\define\u STDCALL\u受支持
#定义_M_IX86
#包括
#包括
#包括
#包括
int main(int argc,字符**argv){
glutInit(&argc,argv);
玻璃窗(“MM 2004-05”);
glewInit();
如果(受支持(“GL\U版本\U 2\U 0”))
printf(“准备好使用OpenGL 2.0\n”);
否则{
printf(“不支持OpenGL 2.0”);
}
返回0;
}
请注意,出于某种原因,OpenGL2.0测试需要该窗口

/cygdrive/c/DOCUME~1/kelebron/LOCALS~1/Temp/ccErbecl.o:test.cpp:(.text+0xa8): undefined reference to `_glLoadIdentity'
collect2: ld returned 1 exit status
../lib/cygwin/glew32.lib(glew.o):glew.c:(.text+0x38e): undefined reference to `_glXGetProcAddress'
#define _STDCALL_SUPPORTED
#define _M_IX86
#include <windows.h>
#include <GL/glew.h>
#include <GL/glut.h>
#include <cstdio>

int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutCreateWindow("MM 2004-05");
    glewInit();
    if (glewIsSupported("GL_VERSION_2_0"))
        printf("Ready for OpenGL 2.0\n");
    else {
        printf("OpenGL 2.0 not supported\n");
    }
    return 0;
}