在 C 程序中链接 SDL

Linking SDL in a C program

我最近在学了一些C 的基础知识后对使用SDL 产生了兴趣。我已经安装了SDL_image 和SDL_mixer。它们位于 /usr/local/include/SDL2。我知道你必须 link 反对头文件,但我不知道该怎么做。我收到 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

如果有人有任何想法,我将不胜感激!提前致谢!

你不想要那个领先时期

错了

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 混音器上……嗯,它有一个

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 

您可以使用 sdl2-config 为 gcc 提供适当的标志:

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

sdl2-config --cflags 生成应传递给编译器的选项列表,sdl2-config --libs 生成应链接到的库列表。