我似乎无法让SDL使用崇高文本

时间:2018-01-09 04:30:22

标签: c++ linux sublimetext3 sdl

我正在制作一款简单的游戏,并希望将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不知道它们在哪里。

1 个答案:

答案 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 可执行文件。