升级到 11.10 后无法编译使用 SDL 的程序 - 对 SDL_Init 的引用未定义

升级到 11.10 后无法编译使用 SDL 的程序 - 对 SDL_Init 的引用未定义

我刚刚从 11.4 升级到 11.10,至少有一件事似乎出了问题:我有一个使用 SDL 和 OpenGL 的 C++ 程序。在升级之前,我可以很好地编译和运行它。现在我得到了链接器错误,例如

undefined reference to `SDL_Init'

我已经安装了libsdl1.2debianlibsdl1.2-dev软件包,我相信这就是我所需要的(但我可能错了)。我像这样编译程序:

gcc -I /usr/include/SDL -lSDL -o test test.cpp

知道是什么原因造成的吗?

答案1

好的,解决了。显然,由于某些神秘的原因,gcc 选项的顺序现在很重要。所以当我这样做时:

gcc -I /usr/include/SDL -o test test.cpp -lSDL

(将-lSDL选项移至末尾)一切正常。我很想知道为什么它突然变得重要,而之前它并不重要,但现在我很高兴它又能正常工作了。

答案2

对于 Eclipse:我遇到了同样的问题,但我已经解决了。

  • 选择项目
  • 项目>属性
  • C/C++ 构建>设置 - 工具设置>GCC C 编译器 - 包含路径 (-l)>“/usr/include/SDL”
  • C/C++ 构建>设置 - 工具设置>GCC C 链接器 - 库 (-l)>“SDL”
  • 申请

...然后构建项目并运行...

答案3

Makefile一个使用 SDL 项目的简单 GNU :

CXXFLAGS:=(shell pkg-config --cflags sdl2) $(CXXFLAGS)
LDLIBS:=$(shell pkg-config --libs sdl2) $(LDLIBS)

all: test

当文件test.cpp与 存在于同一目录中时Makefile

(请注意,我使用了sdl2而不是sdl,因为 SDL 1.2 现在基本上已经失效了。)

GNUmake将会神奇地找出调用的命令g++

答案4

就我而言,我之前使用 G++,但不起作用,切换到 GCC 后就起作用了。不过我用的是 C 语言编写的。

使用 Code::Blocks,库标志是-lSDL2

相关内容