在C程序中链接SDL

3

我最近对使用SDL产生了兴趣,之前已经学习了一些C语言的基础知识。我安装了SDL_image和SDL_mixer,它们位于/usr/local/include/SDL2目录下。我意识到必须链接头文件,但我不确定如何操作。我的源代码中出现了"SDL_mixer或SDL_image不存在"的错误(取决于它们在源代码的行顺序)。我尝试了两种不同的编译命令,但都没有成功,它们分别是:

gcc filename.c -o test -I./include -L./usr/local/include/SDL2 -lSDL2main -lSDL2 -lSDL_mixer -lSDL_image

gcc filename.c -o test -I./usr/local/include/SDL2 -L./lib -lSDL2main -lSDL2 -lSDL_mixer -lSDL_image

如果有任何想法,我会非常感激!提前致谢!

2个回答

6

您不希望有前导句点

错误的

gcc filename.c -o test -I./include -L./usr/local/include/SDL2 -lSDL2main -lSDL2 -lSDL_mixer -lSDL_image

更接近 - 不一定是正确的

gcc filename.c -o test  -L/usr/local/include/SDL2 -lSDL2main -lSDL2 -lSDL_mixer -lSDL_image

任何以句点开头的路径表示从当前目录开始相对寻址,而不是使用预定的绝对路径。
每个系统都有默认库路径的概念,如果你使用标准安装,这是很好的,因此无需执行任何操作。
-I/include 

有时库会提供帮助程序来识别和自动填充这些内容...

sdl和sdl2确实有这样一个帮助程序...这将为您提供那些设置

gcc -o test filename.c  `pkg-config --cflags --libs sdl2`

注意这些反引号……另一种语法风格可以是

gcc -o test filename.c  $(pkg-config --cflags --libs sdl2)

你可以自由地发布那个独立的文件来查看

pkg-config --cflags --libs sdl2

...输出

-D_REENTRANT -I/usr/include/SDL2 -lSDL2

现在让我们谈一下您的sdl mixer...它有一个
pkg-config --cflags --libs SDL2_mixer

...输出

-D_REENTRANT -I/usr/include/SDL2 -lSDL2_mixer -lSDL2

你可能不希望混合使用SDL和SDL2,因此请替换提到的部分。
-lSDL_mixer -lSDL_image

使用

-lSDL2_mixer -lSDL2_image

根据
pkg-config --cflags --libs SDL2_image

...输出

-D_REENTRANT -I/usr/include/SDL2 -lSDL2_image -lSDL2

所以将它们捆绑在一起。
gcc -o test filename.c  -lSDL2main $(pkg-config --cflags --libs sdl2) $(pkg-config --cflags --libs SDL2_mixer)  $(pkg-config --cflags --libs SDL2_image)

或更简单地组合到一起
gcc -o test filename.c -lSDL2main $(pkg-config --cflags --libs  sdl2 SDL2_mixer SDL2_image )

这可以简化为以下内容...但上面的语法更具有适应性。
gcc -o test filename.c -D_REENTRANT -I/usr/include/SDL2  -lSDL2main -lSDL2 -lSDL2_mixer  -lSDL2_image 

非常感谢你详细的回答。我还没有尝试过,但我相信它会起作用! - TheCrifix
2
pkg-config可以与$(pkg-config --cflags --libs sdl2 SDL2_mixer)组合使用。 - Dietrich Epp
@Scott Stensland 嘿 Scott,我刚刚按照你建议的方式使用了以下编译命令:gcc -o test filename.c -lSDL2main $(pkg-config --cflags --libs sdl2 SDL2_mixer SDL2_image),它成功编译了。但是在测试程序时,出现了一个错误。在测试我的程序时,我收到了一个报告说我没有可用的视频设备。有什么想法吗? - TheCrifix
@Scott Stensland 这是链接。再次感谢你。对不起,我的C代码可能有些不完善,请多包涵。 - TheCrifix
@TheCrifix 半熟的比没有烘焙的好!!!它能够生成一个窗口,无论是在本地编译/执行还是在远程服务器上,都没有任何视频设备错误... 你用的是笔记本电脑吗?请粘贴下具体的错误信息。 - Scott Stensland
显示剩余4条评论

4
您可以使用sdl2-config向gcc提供适当的标志:
gcc filename.c -o test `sdl2-config --cflags --libs`

sdl2-config --cflags 会生成一系列的选项,应该将它们传递给编译器。而 sdl2-config --libs 会生成一系列的库,应该将它们链接到程序中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接