在Cygwin下编译最小的GLEW应用程序
让我们考虑以下程序并尝试在Cygwin下进行编译:
#include <GL/glut.h>
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glLoadIdentity();
}
  它编译和运行得很好。  -I/usr/include/opengl似乎非常重要。 
g++ -I/usr/include/opengl -I../include/cygwin -L../lib/cygwin test.cpp -o test.exe -lglut32 -lglu32 -lglew32 -lopengl32
现在,
#include <GL/glew.h> // from newest NVIDIA SDK
#include <GL/glut.h>
int main(int argc, char** argv)
{
    glewInit();
    glutInit(&argc, argv);
    glLoadIdentity();
}
编译
g++ -I/usr/include/opengl -I../include/cygwin -L../lib/cygwin test.cpp -o test.exe -lglut32 -lglu32 -lglew32 -lopengl32
失败。 如何构建第二个应用程序?
第一
有几种方法可以通过NVIDIA SDK构建glew:通过VS,cygwin,cygwin和-D_WIN32。 我也尝试从源代码的原始glew cygwin构建。
VS build给出
/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开始(不仅...)。
  前一段时间我有类似的问题,我发现在Cygwin下编译opengl代码有两种方法。 
  第一个链接反对原生win32api库glut32 glu32 opengl32(也glui)。  那些比较老: 
  过剩v3.7.6 
  opengl v1.1 
  glui 2.11 
  第二种方式使用X11文库glut glu gl。  他们在头文件中有更新的版本号(注意要使用GL扩展需要> v1.2): 
  glut v4(freeglut) 
  opengl v1.3 
  glext 
  ... 
  所以要使用第一个选项comile: -I / usr / include / opengl 
  并链接到: -lglut32 -lGLU32 -lOpenGL32 
  要使用X11版本,请编译: -I / usr / include / (默认包含) 
  并链接: -lglut -lGLU -lGL (注意区别) 
  你可以添加X11头文件和库,但我猜他们包含在GL中。 
  -I的/ usr / X11R6 /包括 
  -L / usr / X11R6 / lib -lXmu -lXi -lXext -lX11 
  在Cygwin安装程序中,以下软件包是您的选择: 
  opengl - 给出了opengl,glut,glui的win32版本 
  libglut-devel -X11版本的glut(freeglut),这个也会选择所有的依赖包。  (glproto,libGL libGLU,libX11,...) 
  我还建议包括Xorg服务器,因为您需要一台X服务器。 
  希望这可以帮助。 
只是为了确保我们谈论的是同样的问题,这是我以前得到的信息。
  $ g ++ -o glew_test.exe glew_test.cpp -lglut32 -lglew32 
  C:用户弗雷德里克 Users 用户的Fredrik  AppAppData 本地温度/ ccgSNdfr.o: 
  glew_test.cpp :(。text + 0x1c):未定义引用'__glutInitWithExit' 
  C:用户弗雷德里克应用程序数据本地的 Temp / ccgSNdfr.o: 
  glew_test.cpp :(。text + 0x37):未定义引用`__glutCreateWindowWithExit' 
  C:用户弗雷德里克应用程序数据本地的 Temp / ccgSNdfr.o: 
  glew_test.cpp :(。text + 0x53):未定义引用`__glutCreateMenuWithExit' 
  C:用户弗雷德里克应用程序数据本地的 Temp / ccgSNdfr.o: 
  glew_test.cpp :(。text + 0x9e):对`glutInitDisplayMode'的未定义引用 
  C:用户弗雷德里克应用程序数据本地的 Temp / ccgSNdfr.o: 
  glew_test.cpp :(。text + 0xb2):未定义的引用'glutInitWindowPosition' 
  C:用户弗雷德里克应用程序数据本地的 Temp / ccgSNdfr.o: 
  glew_test.cpp :(。text + 0xc6):对`glutInitWindowSize'的未定义引用 
  collect2:ld返回1退出状态 
以下几页帮助我解决了这个问题。
基本上我必须在文件的开头定义_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.0n");
    else {
        printf("OpenGL 2.0 not supportedn");
    }
    return 0;
}
请注意,由于某种原因,OpenGL2.0测试需要该窗口。
这听起来像你想链接本机Win32库而不是X11。 添加-L / lib / w32api。 否则,您需要链接到X11库(-L / usr / X11R6 / lib -lX11 -lXi -lXmu)以摆脱glX *链接器错误。
链接地址: http://www.djcxy.com/p/61783.html