我正在编写一个简单的 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"
...
关于我的标题/链接和编译,我缺少一些东西,如果有人有任何建议,我将非常感激。