尽管以前功能链接 Ubuntu,但 GCC 编译具有 undefined reference

标签 gcc ubuntu reference undefined

似乎我无法再在 Ubuntu 11.10 更新后的 GCC 中编译我的代码,尽管在库中使用 -l 进行链接。编译:

gcc -lm -lGL -lGLU -lglut T1.c

(我尝试链接并包含的两个库是 glut 和 math)

所有的库和头文件都在它们应该在的位置(自更新后它们没有消失)并且我已经检查了所有相关的包安装。此外,这是我的环境变量,它们似乎是有序的:

PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

C_INCLUDE_PATH=/usr/include

我不认为这是代码的问题,因为我无法编译我昨天成功编译的文件。但我还是会链接它以防万一:

    #include <math.h>
    #include <GL/glut.h>

    const int  WIDTH=640;
    const int HEIGHT=480;
    const float NEAR_CLIP=0.1f;
    const float FAR_CLIP=100.0f;
    const double INC_ROTATE=5;
    double rotate=0;

    void rotateObject() {
            rotate+=INC_ROTATE;
    }

    void update() {
            //rotateObject();
    }

    void drawAxes() {
        double x = 1.5, y = 1.5, z = 1.5;
        glLineWidth(4);
        glBegin(GL_LINES);
          glColor3d(1,0,0);
          glVertex3d(0,0,0);
          glVertex3d(x,0,0);
          glColor3d(0,1,0);
          glVertex3d(0,0,0);
          glVertex3d(0,y,0);
          glColor3d(0,0,1);
          glVertex3d(0,0,0);
          glVertex3d(0,0,z);
        glEnd();
        glLineWidth(1);
    }

    void render() {
            glClear(GL_COLOR_BUFFER_BIT);
            glLoadIdentity();
            gluLookAt(1.2,1.0,2.5,0.0,0.0,0.0,0.0,1.0,0.0);
            drawAxes();
            glColor3d(1,1,1);
            glRotated(rotate,0,0,1);
            glutWireCube(1);
    }

    void display() {
            update();
            render();
    }

    void reshape(int width, int height) {
            float fAspect=0;
            float fovy=(M_PI/3);
            float top=tan(fovy*0.5)*NEAR_CLIP;
            float bottom=top;
            float left=fAspect*bottom;
            float right=fAspect*top;

            glViewport(0,0,width,height);
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            glFrustum(left,right,bottom,top,NEAR_CLIP, FAR_CLIP);
            glMatrixMode(GL_MODELVIEW);

    }

    int main(int argc, char **argv) {

            glClearColor(0,0,0,1);
            glutInit(&argc, argv);
            glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
        glutInitWindowPosition(100,100);
        glutInitWindowSize(320,320);
        glutCreateWindow("T1");

        glutDisplayFunc(display);
        glutReshapeFunc(reshape);
        glutIdleFunc(display);

        glutMainLoop();

            return 1;
    }

错误信息:

     T1.c:(.text+0x63): undefined reference to `glLineWidth'
     T1.c:(.text+0x6d): undefined reference to `glBegin'
     T1.c:(.text+0x82): undefined reference to `glColor3d'
     T1.c:(.text+0x93): undefined reference to `glVertex3d'
     T1.c:(.text+0xa5): undefined reference to `glVertex3d'
     T1.c:(.text+0xba): undefined reference to `glColor3d'
     T1.c:(.text+0xcb): undefined reference to `glVertex3d'
     T1.c:(.text+0xe1): undefined reference to `glVertex3d'
     T1.c:(.text+0xf6): undefined reference to `glColor3d'
     T1.c:(.text+0x107): undefined reference to `glVertex3d'
     T1.c:(.text+0x11d): undefined reference to `glVertex3d'
     T1.c:(.text+0x122): undefined reference to `glEnd'
     T1.c:(.text+0x12f): undefined reference to `glLineWidth'
     /tmp/cc4VqRwQ.o: In function `render':
     T1.c:(.text+0x143): undefined reference to `glClear'
     T1.c:(.text+0x148): undefined reference to `glLoadIdentity'
     T1.c:(.text+0x18a): undefined reference to `gluLookAt'
     T1.c:(.text+0x1b1): undefined reference to `glColor3d'
     T1.c:(.text+0x1ce): undefined reference to `glRotated'
     T1.c:(.text+0x1db): undefined reference to `glutWireCube'
     /tmp/cc4VqRwQ.o: In function `reshape':
     T1.c:(.text+0x22e): undefined reference to `tan'
     T1.c:(.text+0x28a): undefined reference to `glViewport'
     T1.c:(.text+0x294): undefined reference to `glMatrixMode'
     T1.c:(.text+0x299): undefined reference to `glLoadIdentity'
     T1.c:(.text+0x2da): undefined reference to `glFrustum'
     T1.c:(.text+0x2e4): undefined reference to `glMatrixMode'
     /tmp/cc4VqRwQ.o: In function `main':
     T1.c:(.text+0x30b): undefined reference to `glClearColor'
     T1.c:(.text+0x31e): undefined reference to `glutInit'
     T1.c:(.text+0x328): undefined reference to `glutInitDisplayMode'
     T1.c:(.text+0x337): undefined reference to `glutInitWindowPosition'
     T1.c:(.text+0x346): undefined reference to `glutInitWindowSize'
     T1.c:(.text+0x350): undefined reference to `glutCreateWindow'
     T1.c:(.text+0x35d): undefined reference to `glutDisplayFunc'
     T1.c:(.text+0x367): undefined reference to `glutReshapeFunc'
     T1.c:(.text+0x374): undefined reference to `glutIdleFunc'
     T1.c:(.text+0x379): undefined reference to `glutMainLoop'
     collect2: ld returned 1 exit status

老实说,我不知道为什么 gcc 找不到所需的源文件。如果您能提供任何帮助,我们将不胜感激,在此先致谢。

编辑:

我正在使用 freeglut 添加错误信息

最佳答案

我猜 ld(链接器)已经改变,工作方式有点不同。

将你的库放在源文件之后

 gcc T1.c -lm -lGL -lGLU -lglut 

apt-get install binutils-gold ,显然新的 gold 链接器仍将处理依赖的共享库,即使它们首先出现在命令行中也是如此。

关于尽管以前功能链接 Ubuntu,但 GCC 编译具有 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7773811/

相关文章:

linux - 通过 shell 脚本获取网站的 Url

c++ - 为什么引用模板参数不推导出 const?

使用gcc和Matlab在mac上编译openmp

gcc - 运行时错误 : Segmentation fault with libtommath and libtomcrypt

iphone - Xcode 3.2.1 GCC CLANG 和 LLVM 揭秘

c - OpenMp 运算符 != 的无效控制谓词

linux - 在 Ubuntu 上安装了 clang++3.6,无法选择替代

linux - Ubuntu服务器 "sudo"错误AWS EC2

C# 列出两个引用?

C++ DAL - 返回引用或填充传入引用