【问题标题】:'"SDL.h" no such file or directory found' when compiling'"SDL.h" 没有找到这样的文件或目录' 编译时
【发布时间】:2012-05-07 20:37:04
【问题描述】:

这是我当前 Makefile 的一部分:

CFLAGS = -O2 -Wall -pedantic -std=gnu++11 `sdl-config --cflags --libs` -lSDL_mixer

我已经正确安装了 libsdl,SDL.h 位于它所属的 /usr/include/sdl 中,但它无法编译。我的 .h 文件中也有 #include "SDL.h" 行,但还是不行。

有人知道为什么吗?

【问题讨论】:

    标签: c++ linux sdl


    【解决方案1】:

    对于Simple Direct Media Layer 2 (SDL2),在 Ubuntu 16.04 上安装后通过:

    sudo apt-get install libsdl2-dev
    

    我使用了标题:

    #include <SDL2/SDL.h>  
    

    和编译器链接器命令:

    -lSDL2main -lSDL2 
    

    此外,您可能还想安装:

    apt-get install libsdl2-image-dev  
    apt-get install libsdl2-mixer-dev  
    apt-get install libsdl2-ttf-dev  
    

    使用这些标题:

    #include <SDL2/SDL_image.h>
    #include <SDL2/SDL_ttf.h>
    #include <SDL2/SDL_mixer.h>  
    

    和编译器链接器命令:

    -lSDL2_image 
    -lSDL2_ttf 
    -lSDL2_mixer
    

    【讨论】:

    • 在linux上,只需将#include &lt;SDL.h&gt; 改成#include &lt;SDL2/SDL.h&gt; 即可修复,当然编译时需要-lSDL2标志。
    【解决方案2】:

    如果头文件是/usr/include/sdl/SDL.h并且你的代码有:

    #include "SDL.h"
    

    您需要修复您的代码:

    #include "sdl/SDL.h"
    

    或者告诉预处理器在哪里找到包含文件:

    CFLAGS = ... -I/usr/include/sdl ...
    

    【讨论】:

      【解决方案3】:

      大多数时候 SDL 位于 /usr/include/SDL。如果是这样,那么您的#include &lt;SDL.h&gt; 指令是错误的,它应该是#include &lt;SDL/SDL.h&gt;

      另一种方法是将/usr/include/SDL 目录添加到您的包含目录中。为此,您应该将-I/usr/include/SDL 添加到编译器标志...

      如果您使用的是 IDE,这也应该很容易......

      【讨论】:

        【解决方案4】:

        头文件位于

        /usr/include/SDL/SDL.h
        
               __OR__
        
        /usr/include/SDL2/SDL.h  #  for SDL2
        

        在你的 c++ 代码中使用

        #include <SDL.h>
        
               __OR__
        
        #include <SDL2/SDL.h>    // for SDL2
        

        你有正确的用法

        sdl-config --cflags --libs
        
               __OR__
        
        sdl2-config --cflags --libs   #  sdl2
        

        这会给你

        -I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT
        -L/usr/lib/x86_64-linux-gnu -lSDL
        
               __OR__
        
        -I/usr/include/SDL2 -D_REENTRANT
        -lSDL2
        

        有时您可能还会看到这种适用于标准安装的用法

        pkg-config --cflags --libs sdl
        
               __OR__
        
        pkg-config --cflags --libs sdl2   #  sdl2
        

        它为您提供

        -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -lSDL
        
               __OR__
        
        -D_REENTRANT -I/usr/include/SDL2 -lSDL2   #  SDL2
        

        【讨论】:

        • 注意:您对他使用 sdl-config --clfags --libs 的更正对于 SDL2 是错误的。
        • @ShawnicHedgehog 我更新为同时显示 SDL 和 SDL@
        【解决方案5】:

        最简单的想法是在编译代码时添加 pkg-config --cflags --libs sdl2。

        g++ file.cpp `pkg-config --cflags --libs sdl2`

        【讨论】:

          【解决方案6】:

          有一个类似的案例,我无法使用StackAttacks 解决方案,因为他指的是 SDL2,这是我使用的旧代码太新。

          幸运的是,我们来自askUbuntu 的朋友也有类似的情况:

          Download SDL

          tar xvf SDL-1.2.tar.gz
          cd SDL-1.2
          ./configure
          make
          sudo make install
          

          【讨论】:

            猜你喜欢
            • 2011-12-08
            • 2012-11-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-31
            • 2013-12-04
            • 2016-03-04
            • 1970-01-01
            相关资源
            最近更新 更多