gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:54 31 4
gpt4 key购买 nike

似乎我无法再在 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com