【问题标题】:Compile an SDL project using gcc?使用 gcc 编译 SDL 项目?
【发布时间】:2021-04-23 16:12:27
【问题描述】:

如何在不使用 Cmake 的情况下在 linux 命令行中使用 gcc 编译 sdl 项目?

编辑;

gcc SDLGAME.c pkg-config --cflags --libs sdl2

但我得到了错误。

gcc: error: Pkg-config: No such file or directory
gcc: error: sdl2: No such file or directory
gcc: error: unrecognized command line option ‘--cflags’
gcc: error: unrecognized command line option ‘--libs’; did you mean ‘--libs=’?

@HolyBlackCat

源代码--->>


#include <stdio.h>
#include <SDL2/SDL.h>

int main(int argc,char *argv[])
{

    if (SDL_Init(SDL_INIT_VIDEO) !=0)
    {
        printf("error SDL");
        return 0;
    }   
    SDL_Window* win=SDL_CreateWindow("Game",
                    SDL_WINDOWPOS_CENTERED,
                    SDL_WINDOWPOS_CENTERED,
                    500,500,0);
    return 0;
}

我得到这个错误--->>

error: XDG_RUNTIME_DIR not set in the environment.
error SDL

【问题讨论】:

标签: c linux gcc sdl


【解决方案1】:

警告:这不是一个完整的解决方案,而是一些建议,并以 OP 的 [现已删除] 答案下的顶级评论和 cmets 开头。


复习...

使用以下方法修复原始问题后:

gcc -o SDLGAME SDLGAME.c `pkg-config --cflags --libs sdl2`

OP 运行程序产生:

error: XDG_RUNTIME_DIR not set in the environment.

这可能是关于 ubuntu 安装本身的一般问题。一些资源:https://askubuntu.com/questions/872792/what-is-xdg-runtime-dirhttps://askubuntu.com/questions/456689/error-xdg-runtime-dir-not-set-in-the-environment-when-attempting-to-run-naut

解决方法可能是:

export XDG_RUNTIME_DIR=/tmp/dir
mkdir -p /tmp/dir

但是,我在我的家庭系统上成功运行了程序,运行 fedora 29,我的 ubuntu 系统运行 18.04.5

在我的系统上,XDG_RUNTIME_DIR 设置为 /run/user/1000。但是,无论有无解决方法,甚至在我的系统上执行 unset XDG_RUNTIME_DIR 都有效。

但是: 在我的 ubuntu 系统上,由于一些问题,我在一年前删除了标准的 libsdl2 包并从 source 包中重建并安装了它有。

因此,如果解决方法不起作用,我建议 libsdl2 从源代码重建/重新安装。

即使标准包工作正常,在调试您的应用程序时,查阅libsdl2 源代码也会很有帮助。

请注意,我对您的应用所做的一项更改是在底部添加 sleep(3),以便您可以看到弹出窗口。


这是我用来从源代码构建/安装的方法:

可能需要卸载/删除 二进制 libsdl2 包。所以,你必须做(例如)

sudo apt-get remove libsdl2 libsdl2-dev

或者,无论二进制包叫什么[我忘记了]。但是,那些也来自:apt-cache search libsdl2

所以,一旦清理干净,我所做的是:

  1. 创建目录(例如):$HOME/aptsrc
  2. cd $HOME/aptsrc
  3. 下载源码包[没有sudo]:apt-get source libsdl2
  4. 这会提取几个文件(例如*.tar.gz*.tar.xz*.dsc 和一个目录。在我的系统上,它是:libsdl2-2.0.8+dfsg1,但对你来说可能不同。执行(例如):@987654344 @
  5. cd $DIR
  6. 配置为:$DIR/configure
  7. 运行cmake:cmake $DIR
  8. 使用以下命令运行 make:make
  9. 安装:sudo make install

请注意,这来自我创建的内部脚本。即使在cd $DIR 之后,我认为有必要在命令上使用完整路径[如果指示]。

现在,库应该安装在/usr/local 下。 pkg-config --cflags --libs sdl2 的输出应该反映这一点:

-D_REENTRANT -I/usr/local/include/SDL2 -L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2

这个命令的原始输出应该是这样的:

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

这是从二进制包标准安装,所以如果你仍然有它,二进制包可能仍然被安装。

否则,您现在应该能够使用原始的 gcc 命令重新构建您的应用程序。现在,它应该附加到库的源构建版本。您可以通过ldd ./SDLGAME 确认这一点,但运行它可能会更容易。

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 2020-04-06
    • 1970-01-01
    • 2018-12-17
    • 2014-11-30
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多