我正在编写一个简单的 C++、opengl 程序,但我很难从目标文件生成可执行文件。我可以使用以下方法创建每个 .cpp 的目标文件而不会出错:
g++ -c filename.cpp ----> filename.o
每个 .cpp 创建一个对象,这让我假设它可以很好地找到 opengl header ,但是当我尝试从对象创建可执行文件时,它输出:
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
map .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"
...
关于标题/链接和编译,我缺少一些东西,如果有人有任何建议,我将非常感激。
最佳答案
您需要链接 OpenGL 库:可能将 -lgl
传递给最后一个 g++ 调用。
如果您的系统有 pkg-config
,您可以使用 pkg-config --cflags --libs gl
获取所有正确的标志。
为了将来引用,“ undefined reference ”是一个链接器错误,它总是表示同一件事:您错过了目标文件或库。它只在链接时出现,从不在简单编译时出现(即使用 -c
)
关于c++ - 编译多个 C++ OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837822/