c++ - 编译多个 C++ OpenGL

标签 c++ opengl compilation header g++

我正在编写一个简单的 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/

相关文章:

java - 如何使用java代码编译其他文件夹中的java文件?

c++ - vector.erase 和 std::remove 自定义 vector

android - 为 Android 应用程序选择 flash/openGL/其他动画?

c++ - OpenGL将纹理四边形渲染为(0,0)的单个像素?

java - System.getProperty ("java.class.path") 不显示 "WEB-INF/lib"和包含的 jar

linux - 在(CentOS 6.5)2.6.32内核中编译2.4.20内核

c++ - stringstream 的 showbase 和前导零

c++ - 在 C++ 中减小大小/压缩 JSON 字符串

c++ - 使用 Boost::asio 触发写入

python - 如何在 OpenGL 中为对象的每个面设置单独的颜色?