web-dev-qa-db-ja.com

コンパイル時に「 "SDL.h"そのようなファイルまたはディレクトリが見つかりません」

これが私の現在のMakefileの一部です。

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

Libsdlを適切にインストールしました。SDL.hは/ usr/include/sdlにありますが、それは属しますが、コンパイルされません。 .hファイルにも#include "SDL.h"という行がありますが、まだ行けません。

誰もが理由を知っていますか?

17
argoneus

ヘッダーファイルが/usr/include/sdl/SDL.hとあなたのコードは次のとおりです。

#include "SDL.h"

コードを修正する必要があります。

#include "sdl/SDL.h"

または、インクルードファイルの場所をプリプロセッサに指示します。

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

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
15
StackAttack

ほとんどの場合、SDLは/usr/include/SDLにあります。その場合、#include <SDL.h>ディレクティブが間違っている場合、#include <SDL/SDL.h>である必要があります。

その代わりに、/usr/include/SDLディレクトリをincludeディレクトリに追加します。そのためには、-I/usr/include/SDLをコンパイラフラグに追加する必要があります...

IDEを使用している場合、これも非常に簡単です...

6
bardes

ヘッダーファイルは

/usr/include/SDL/SDL.h

あなたのC++コードでこのヘッダーを使用してプル

#include <SDL.h>

あなたはの正しい使い方をしています

`sdl-config --cflags --libs` 

あなたに与えます

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

時には、このインストールが標準インストールで機能することもあります

`pkg-config --cflags --libs sdl`

あなたに供給する

-D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -lSDL
1
Scott Stensland

最も簡単なアイデアは、コードのコンパイル中にpkg-config --cflags --libs sdl2を追加することです。

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

0
Mayank Sharma

同様のケースがあり、 StackAttack sのソリューションを使用できませんでした。彼が使用しているレガシーコード用のSDL2を参照しているためです。

幸いなことに askUbunt の友人は似たようなものを持っていました:

SDLのダウンロード

tar xvf SDL-1.2.tar.gz
cd SDL-1.2
./configure
make
Sudo make install
0
Qohelet