我最近对学习了一些基础知识后使用SDL感兴趣。我已经安装了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
如果有人有任何想法我会很感激!提前谢谢!
答案 0 :(得分:3)
你不希望那个领先时期
错误
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
答案 1 :(得分:2)
您可以使用sdl2-config
为gcc提供适当的标志:
gcc filename.c -o test `sdl2-config --cflags --libs`
sdl2-config --cflags
生成一个应该传递给编译器的选项列表,sdl2-config --libs
生成一个应该链接到的库列表。