链接器错误:未定义对符号“glOrtho”的引用

Posted

技术标签:

【中文标题】链接器错误:未定义对符号“glOrtho”的引用【英文标题】:Linker error : undefined reference to symbol 'glOrtho' 【发布时间】:2013-07-20 20:31:21 【问题描述】:

我在 Ubuntu 13.04 (*mesa-common-dev freeglut3-dev*) 中安装了 OpenGL 包并尝试运行示例程序。

#include "GL/freeglut.h"
#include "GL/gl.h"

/* display function - code from:
     http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html
This is the actual usage of the OpenGL library. 
The following code is the same for any platform */
void renderFunction()

    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
    glBegin(GL_POLYGON);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    glEnd();
    glFlush();


/* Main method - main entry point of application
the freeglut library does the window creation work for us, 
regardless of the platform. */
int main(int argc, char** argv)

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(100,100);
    glutCreateWindow("OpenGL - First window demo");
    glutDisplayFunc(renderFunction);
    glutMainLoop();    
    return 0;

但是,我遇到了这个错误,不知道该怎么办。

ved@vedvals:~/Desktop/p1$ g++ p1.cpp -lglut
/usr/bin/ld: /tmp/ccgGdeR2.o: undefined reference to symbol 'glOrtho'
/usr/bin/ld: note: 'glOrtho' is defined in DSO /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 so try adding it to the linker command line
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status

我看过OpenGL hello.c fails to build using CMake 因为错误相似,但我没有使用 CMake

我的代码是错误的还是我需要包含/更改/调整一些设置?

我参考了这个网站的安装和代码:

Setting up an OpenGL development environment in Ubuntu Linux

【问题讨论】:

【参考方案1】:

你需要链接OpenGL库:

g++ p1.cpp -lglut -lGL

【讨论】:

我是 opengl 编程的新手,是否有任何方法可以自动化该过程,或者我必须始终为我的所有 opengl 程序添加上面指定的链接器参数?我已经引用了与 codeprojects 上相同的链接,用于为 opengl 初始化我的系统,并且正在使用 ubuntu 13.04。 在 linux 中我必须添加“-lGLU”。【参考方案2】:

您尚未链接定义 glOrtho() 的 OpenGL 库。要使其工作,请使用g++ p1.cpp -lglut -lGL 编译/链接。注意链接库的顺序,因为它在ld(g++ 使用的链接器)中很重要。 GLUT 库依赖于 OpenGL,因此 -lGL 必须遵循 -glut。这是因为ld 只在库中循环一次,因此如果您链接-lGL -lglut,则不会定义从 lglut 到 lGL 的引用,从而导致链接错误。抱歉这么长的回答,但我希望你能从中学到一些东西。

【讨论】:

以上是关于链接器错误:未定义对符号“glOrtho”的引用的主要内容,如果未能解决你的问题,请参考以下文章

gcc链接错误:未定义对符号'_ZN2cv5flann12SearchParamsC1Eifb'的引用,[重复]

链接器错误,使用 g++ 链接到由 gcc 编译的库,未定义对该函数的引用

未定义对向量<String> g++ 链接器错误的引用[重复]

STM32 GNU ARM 链接器:使用 eclipse 对函数()的未定义引用

链接器错误 - 未定义的符号

未定义的符号引用,但库已链接