0

我正在编写一个简单的 C++、opengl 程序,但我很难从目标文件生成可执行文件。我可以使用以下方法创建每个 .cpp 的目标文件而不会出错:

g++ -c filename.cpp  ---->   filename.o

每个 .cpp 创建一个对象,这使我假设它可以很好地找到 opengl 标头,但是当我尝试从对象创建可执行文件时,它会输出:

g++ -o OUTPUT Main.o Time.o Map.o Vehicle.o

Main.o: In function `init()':
Main.cpp:(.text+0x12a): undefined reference to `glEnable'
Main.cpp:(.text+0x134): undefined reference to `glShadeModel'
Main.cpp:(.text+0x14d): undefined reference to `glViewport'
Main.cpp:(.text+0x157): undefined reference to `glMatrixMode'
Main.cpp:(.text+0x15c): undefined reference to `glLoadIdentity'

我意识到 g++ 告诉我它在任何地方都找不到 OpenGL 函数,这意味着它没有链接到 glu.h、gl.h 等。但是为什么创建对象文件时没有类似的错误,但我可以'不让我的可执行文件?目标文件不会遭受与 .exe 相同的链接错误吗?我试过-I和g++ -o RUN Time.o Main.o Map.o Vehicle.o -L/usr/include/GL/ -lGL -lGLU,也验证了OpenGL目录的路径。

每个文件的标题如下:

libgl.h:

#ifndef LIBGL_H
#define LIBGL_H

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <math.h>
#include "Time.h"
#include "Link.h"

#endif

时间.h:

#ifndef TIME_H
#define TIME_H

extern float GLOBAL_TIME;

#endif

地图.h

#ifndef MAP_H
#define MAP_H
#include "libgl.h"
....
#endif

车辆.h:

#ifndef VEHICLE_H
#define VEHICLE_H
#include "libgl.h"
...
#endif

主要.cpp:

#include "libgl.h"
#include "Map.h"
#include "Vehicle.h"
 ...

关于我的标题/链接和编译,我缺少一些东西,如果有人有任何建议,我将非常感激。

4

1 回答 1

3

您需要与 OpenGL 库链接:可能传递-lgl到最后一次 g++ 调用。

如果你的系统有pkg-config你可以pkg-config --cflags --libs gl用来获取所有正确的标志。

为了将来的参考,“未定义的参考”是一个链接器错误,它总是意味着同样的事情:你错过了一个目标文件或一个库。它只在链接时出现,从不在简单编译时出现(即使用-c

于 2012-05-31T16:51:56.657 回答