如何在 Linux 中使用 SDL?

Posted

技术标签:

【中文标题】如何在 Linux 中使用 SDL?【英文标题】:how to use SDL in linux? 【发布时间】:2009-12-03 04:27:54 【问题描述】:

我学校的 linux 服务器只是一个简单的服务器,没有 x-windows,只是一个命令行界面。

我尝试在该服务器上制作图形 c 程序,但发现很多困难。 我使用 SDL 库,但每次尝试使用 gcc 编译代码时,都会得到:

testcursor.c:(.text+0x1ad): undefined reference to `SDL_Init'
testcursor.c:(.text+0x1b6): undefined reference to `SDL_GetError'
testcursor.c:(.text+0x200): undefined reference to `SDL_SetVideoMode'
...

有人知道如何解决这个问题吗?如果没有,有谁在linux下用c做过图形程序,请帮忙!我将不胜感激。谢谢。

【问题讨论】:

仅供参考,如果您没有 X-windows,您将无法在该服务器上运行图形 SDL 程序。这将使调试变得相当困难。 如果直接使用帧缓冲设备就可以。 DirectFB 是一种方法。 【参考方案1】:

在linux上链接SDL的recommended way使用的是sdl-config脚本。

示例:

gcc -c test.c $(sdl-config --cflags)
gcc -o test test.o $(sdl-config --libs)
./test

或示例:

gcc -o test test.c $(sdl-config --cflags --libs)

其中 ` 是反引号字符。

【讨论】:

【参考方案2】:

-lSDL 添加到您的编译行。

这告诉gcc 将您的代码链接到 SDL 库。

【讨论】:

【参考方案3】:

您没有链接到 SDL 库。您的命令应如下所示:

gcc testcursor.c -lsdl

假设您使用的是 Linux 发行版附带的 SDL。如果你下载它并手动构建它,你可能需要更复杂的东西,像这样:

gcc -I/usr/local/include/sdl testcursor.c -L/usr/local/lib -lsdl

-I 和 -L 选项分别告诉 gcc 在哪里查找包含文件和库。第一个命令不需要它们,因为如果您为系统使用库存 SDL,它们位于默认位置。

【讨论】:

只是为了澄清,由于字体......这是-i(但大写)和-L,用于查找文件的位置。 -L(但小写)用于链接到 -L(大写)目录中的特定库文件。 (大写的 i 和小写的 L 在代码块中看起来不同,但在纯文本字体中可能已经很清楚了!) 我有一个困难,我不是我学校 linux 机器的 root 用户。因此我无权安装任何库(例如 sdl)。我认为因此我无法使用您上面的命令进行编译。请问有什么办法可以解决这个问题吗? 最明显的解决方案是让您的系统管理员安装 SDL 以及您需要的任何其他库。如果这不能发生,您可以在自己的帐户下安装它们。下载源代码,然后尝试使用“./configure --prefix=$HOME”之类的命令对其进行配置。然后,您可以在没有 root 身份的情况下执行“make install”,因为所有内容都将进入您的主目录的子目录。然后上面的 gcc 命令就变成了“gcc -I$HOME/include...” 注意,如果你的系统真的被锁得很紧,SDL 可能没有权限,它需要接管整个屏幕,就像它一样。跨度>

以上是关于如何在 Linux 中使用 SDL?的主要内容,如果未能解决你的问题,请参考以下文章

SDL/C++ OpenGL 程序,如何阻止 SDL 捕获 SIGINT

如何在 linux 上降低 wav 文件的质量和规格

如何在 SDL2 的窗口标题中使用重音字符?

如何在 cmake 中使用 SDL2 和 SDL_image

如何在我的程序中正确使用 SDL2?

如何在 cmake 中使用 emscripten 端口(SDL2 和 Freetype)