我刚刚从 11.4 升级到 11.10,至少有一件事似乎出了问题:我有一个使用 SDL 和 OpenGL 的 C++ 程序。在升级之前,我可以很好地编译和运行它。现在我得到了链接器错误,例如
undefined reference to `SDL_Init'
我已经安装了libsdl1.2debian
和libsdl1.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