C++/OpenGL - 开始一个新项目

Posted

技术标签:

【中文标题】C++/OpenGL - 开始一个新项目【英文标题】:C++/OpenGL - Starting a new project 【发布时间】:2016-09-24 07:33:09 【问题描述】:

我正在使用 C++ 和 OpenGL 开始一个新项目,以制作一个简单的游戏并自学 OpenGL。我不想使用 GLUT,而宁愿使用 SDL 来制作 windows 等。但是,我在使用 Makefile 时遇到了很多奇怪的问题。目前,当我键入 make 时,当我在 G++ 命令中包含 $(LFLAGS) $(LDFLAGS) 时会收到此响应:

g++-5 tetris.o -o tetris -std=c++14
Undefined symbols for architecture x86_64:
  "_SDL_CreateWindow", referenced from:
      _main in tetris.o
  "_SDL_GL_CreateContext", referenced from:
      _main in tetris.o
  "_SDL_Init", referenced from:
      _main in tetris.o
  "_SDL_PollEvent", referenced from:
      game_loop(SDL_Window*)     in tetris.o
  "_glewGetErrorString", referenced from:
      _main in tetris.o
  "_glewInit", referenced from:
      _main in tetris.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make: *** [tetris] Error 1

当我不这样做时的回应:

g++-5 -Wall  -framework SDL2 tetris.o -o tetris -std=c++14
ld: framework not found SDL2
collect2: error: ld returned 1 exit status
make: *** [tetris] Error 1

这是我的新 Makefile:

CC = g++-5
CFLAGS = -Wall -c -Wno-deprecated-declarations
LFLAGS = -Wall 
LDFLAGS = -framework SDL2
LDLIBS= -lSDL2 -lglew -lGL
INCLUDES = -I/Library/Frameworks/SDL2.framework/Headers/
STD = -std=c++14

all: tetris

tetris: tetris.o
    $(CC) $(LFLAGS) $(LDFLAGS) tetris.o -o tetris $(STD)

tetris.o: tetris.cpp
    $(CC) $(CFLAGS) $(LDFLAGS) -o $@ tetris.cpp $(STD)

.PHONY: clean

clean: 
    rm tetris *.o

我的 .cpp 文件的标题部分:

#include <SDL2/SDL.h>
#include <GL/glew.h>
#include <unistd.h>
#include <iostream>

【问题讨论】:

你有 32 位架构 CPU 还是 64 位? 64 位 OS X El Capitan。只是想知道需要在 makefile 中进行什么链接才能消除所有这些怪异现象。不推荐使用 OpenGL 教程中的所有函数。 【参考方案1】:

也许你需要添加

LDFLAGS = -framework GLUT 

到你的 Makefile

【讨论】:

我认为解决了它!谢谢! @IanH 尝试将 -LGLEW 更改为 -lglew 包括 = -I/Library/Frameworks/SDL2.framework/Headers/ 将此行添加到您的 Makefile 中 让我们continue this discussion in chat。【参考方案2】:

只需使用freeglut,无需使用SDL,即可开始使用OpenGL。

【讨论】:

我该怎么做。我希望能够打开一个窗口并在所述窗口内做一些事情。 您在主窗口内创建一个子窗口,将您的用户界面放在主窗口中,使用子窗口进行OpenGL渲染

以上是关于C++/OpenGL - 开始一个新项目的主要内容,如果未能解决你的问题,请参考以下文章

一个人如何将VS,C ++,OpenGL应用程序部署到另一台计算机上?

尝试编译opengl项目时出现c ++未定义的引用错误

自己编译OpenGL项目踩过的坑

调用OpenGL函数时程序崩溃

迁移基于 Qt QGL 的项目以使用 OpenGL 4.3

使用 Silk.NET 创建 OpenGL 空窗口项目例子