我正在制作一款简单的游戏,并希望将SDL用于图形。我运行Linux Ubuntu,使用sublime文本编辑器,g ++编译器,我用c ++编写代码。我下载了SDL并关注了these steps。
在我执行这些步骤后,所有SDL错误都停止显示。但是,标志变量不起作用。
这是代码:
#include <SDL2/SDL.h>
Risk() {
SDL_Init(SDL_INIT_HAPTIC);
window = SDL_CreateWindow("Board",SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 500,500, SDL_WINDOW_RESIZABLE);
SDL_GetError();
}
我的编译器中出现的错误是:
tom@TBT-XPS-13-9360:~/Documents/Subjects/CS/Fun/Risk$ g++ -std=c++14
Game.cpp -W/tmp/ccLwSxiL.o: In function `Risk::Risk()':
Game.cpp:(.text._ZN4RiskC2Ev[_ZN4RiskC5Ev]+0x1f): undefined reference
to `SDL_Init'
Game.cpp:(.text._ZN4RiskC2Ev[_ZN4RiskC5Ev]+0x44): undefined reference
to `SDL_CreateWindow'
Game.cpp:(.text._ZN4RiskC2Ev[_ZN4RiskC5Ev]+0x54): undefined reference
to `SDL_GetError'
collect2: error: ld returned 1 exit status
我认为错误是SDL库位置错误,或者Sublime不知道它们在哪里。
答案 0 :(得分:2)
问题是Sublime没有添加必需的指令来指示可执行文件应链接到SDL2库。
您可以在命令行中使用参数 -lSDL2 指示它,或者使用带有sdl2-config --libs
的sdl2-config程序,如下所示:
$ g++ -o executable-name source.cpp -lSDL2
或
$ g++ -o executable-name source.cpp $(sdl2-config --libs)
sdl2-config 只是一个实用程序,可输出用于编译和链接的适当配置选项。您可以通过单独运行来查看它:
$ sdl2-config --libs
它应该输出如下内容:
-L/usr/lib -lSDL2
您可以看到之前提到的相同的 -lSDL2 ,还有一个-L / usr / lib指令,指示链接器在 / usr / lib / 搜索路径中的目录。 通常,您应该使用 sdl2-config 来获取传递给编译器所需的配置选项,而不是自己指示它们,除非您知道自己在做什么,当然。
您可以在Sublime Text中使用Make build系统,而不是转到命令行进行编译。使用以下内容将名为Makefile的文件添加到项目目录中:
# OBJS place here every file to compile as part of the project
OBJS = Game.cpp
# CC compiler to use
CC = g++
# COMPILER_FLAGS compilation options
COMPILER_FLAGS = -std=c++14 -Wall `sdl2-config --cflags`
# LINKER_FLAGS libraries to link
LINKER_FLAGS = `sdl2-config --libs`
# OBJ_NAME executable
OBJ_NAME = mygame
all : $(OBJS)
$(CC) $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
然后转到菜单工具 - &gt; 构建系统并选择制作。现在尝试构建项目,如果成功,应该创建一个 mygame 可执行文件。