【问题标题】:I cannot seem to get SDL to work with sublime text我似乎无法让 SDL 处理崇高的文本
【发布时间】:2018-01-09 04:30:21
【问题描述】:

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

【问题讨论】:

  • 那些是链接器错误,这意味着链接器找不到它需要的库来满足丢失的符号。最明显的原因是您使用的是 C++ Single File 内置构建系统,它不包含任何额外的库。

标签: c++ linux sublimetext3 sdl


【解决方案1】:

问题在于 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 构建系统,而不是去命令行编译。在项目目录中添加一个名为 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) 

然后进入菜单Tools -> Build System 并选择Make。现在尝试构建您的项目,如果成功,应该已经创建了一个 mygame 可执行文件。

【讨论】:

  • 你说的参数,我是加在c++文件里,还是linux命令行里?
  • 在 Linux 命令行上,当您尝试编译文件时。我发布的 Makefile 包含它们,如果您在 Sublime 中选择 Make 构建系统并添加一个名为 Makefile 的文件,其中包含我发布的内容,您应该能够使用Sublime 中的构建菜单选项。
  • 它说我缺少分隔符错误:*** 缺少分隔符。停止。
  • 没关系,我可以编译它,但是 SDL 有问题。这个问题已经回答了,谢谢
猜你喜欢
  • 2014-08-06
  • 2010-11-27
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
相关资源
最近更新 更多