使用Eclipse 3.6.2,当前版本的CDT,当前的Cygwin工具和C ++(GCC)编译器。链接-lglu32,-lglut32,-lopengl32。
我正在尝试为OpenGL开发设置此环境,并且遇到了我无法解决的链接错误。当前版本的相关opengl和glut libs和头文件已复制到C:\ cygwin \ lib和C:\ cygwin \ usr \ include \ w32api
例如,当这个编译和链接..
#include <windows.h>
#include <GLES2/gl2.h>
#include <EGL/egl.h>
#include <GL/glut.h>
[...]
void display() {
glClear( GL_COLOR_BUFFER_BIT ); /* Clear the screen with the clear color */
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
glutSwapBuffers();
}
以下内容在glVertextAttribPointer,glEnableVertexAttribArray和glDisableVertexAttribArray上抛出未定义的引用错误。
void display() {
glClear( GL_COLOR_BUFFER_BIT ); /* Clear the screen with the clear color */
// map the border vertices
glVertexAttribPointer(crosshairVertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*) &crossVertices[0]);
glEnableVertexAttribArray(crosshairVertexHandle);
glLineWidth(2.0f);
glDrawArrays(GL_LINES, 0, 4);
glDisableVertexAttribArray(crosshairVertexHandle);
glutSwapBuffers(); /* Double buffering */
}
这是错误..
构建配置项目ogl_tests的调试**
make all
Building file: ../src/ogl_tests.cpp
Invoking: Cygwin C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/ogl_tests.d" -MT"src/ogl_tests.d" -o"src/ogl_tests.o" "../src/ogl_tests.cpp"
Finished building: ../src/ogl_tests.cpp
Building target: ogl_tests.exe
Invoking: Cygwin C++ Linker
g++ -o"ogl_tests.exe" ./src/ogl_tests.o -lglu32 -lglut32 -lopengl32
./src/ogl_tests.o: In function `_Z7displayv':
/cygdrive/c/Users/David/workspace/ogl_tests/Debug/../src/ogl_tests.cpp:61: undefined reference to `__imp__glVertexAttribPointer@24'
/cygdrive/c/Users/David/workspace/ogl_tests/Debug/../src/ogl_tests.cpp:62: undefined reference to `__imp__glEnableVertexAttribArray@4'
/cygdrive/c/Users/David/workspace/ogl_tests/Debug/../src/ogl_tests.cpp:67: undefined reference to `__imp__glDisableVertexAttribArray@4'
collect2: ld returned 1 exit status
make: *** [ogl_tests.exe] Error 1
任何想法? - 我正在使用的cygwin路径是正确的吗?
答案 0 :(得分:1)
OpenGL 不 OpenGL ES。这是两个完全不同的东西(即使它们在表面看起来相似)。如果您运行的是Vista 64,那么您可能无法在运行OpenGL ES的系统上运行。
有一个OpenGL扩展允许您在桌面窗口上创建OpenGL ES上下文。但它尚未广泛实现,并且您没有在代码中使用它。哦,GLUT不能使用OpenGL ES。
EGL同样没有广泛使用,特别是在Windows上。关于在Windows上编写EGL实现已经有了一些噪音,但没有任何结果。
所以你的两个标题没有任何意义。你应该包括OpenGL的东西,而不是OpenGL ES。
答案 1 :(得分:1)
@Nicol Bolas给了你一个我给你的另一个难题:你使用的OpenGL功能超越了OpenGL-1.1的功能,甚至OpenGL-1.4。在Windows上,必须通过扩展机制获得该版本以外的OpenGL功能。
最简单的方法是使用GLEW或GLEE等扩展包装。在创建上下文后,必须使用glewInit()
初始化GLEW。 GLEE可以在没有初始化的情况下使用(这在首次调用扩展函数时会隐式发生)。