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

ada*_*dam 7 11.10 gcc sdl

我刚刚从 11.4 升级到 11.10,但至少有一件事似乎被破坏了:我有一个使用 SDL 和 OpenGL 的 C++ 程序。我能够在升级之前很好地编译和运行它。例如,现在我收到链接器错误

undefined reference to `SDL_Init'
Run Code Online (Sandbox Code Playgroud)

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

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

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

ada*_*dam 18

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

gcc -I /usr/include/SDL -o test test.cpp -lSDL
Run Code Online (Sandbox Code Playgroud)

(将-lSDL选项移到最后)一切都很好。我很想知道为什么它突然很重要,以前如果没有,但现在我很高兴这些东西再次起作用。

  • 谢谢,很有帮助。您也可以将命令完全转换为 gcc -o test test.cpp -I /usr/include/SDL -lSDL 这在您使用 pkg-config 时很有用,因为您仍然可以像 gcc 一样一次性获得 cflags 和 libs -o test test.cpp \`pkg-config --cflags --libs sdl\` (2认同)
  • 在这里阅读原因 http://stackoverflow.com/questions/9417169/why-does-the-library-linker-flag-sometimes-have-to-go-at-the-end-using-gcc (2认同)