読者です 読者をやめる 読者になる 読者になる

ネット偽善者でもいいじゃない

悩んでるなら面白いマンガ読もう

SDL初心者がとりあえずRaspberry Piを使ってやってみる

SDLコンパイルするときは -lSDL をつけてやる必要がある

最初は動かしやすいやつをやってみる

ラズベリーパイとプロジェクターでなんかしようかなと思っていて Interface5月号を見ているのですが

なんか難しい・・・SDLとかopencvのこととかがよく分からなかったので SDLについて調べてみた

最初は下記のサイトが動かすのに調度良かった 第268回 SDLで夢のオリジナルゲーム開発:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

ちなみに、raspberry pi を使っている場合は startxでxwindowを起動してやる必要があります

しかし、コードが長いのでそもそもC言語すらあんまりわかってないのは厳しかった(^_^;) ので、簡単なところからやってみることに

画面(ウインドウ)を表示する

下記のサイトを参考にしました

Nojimaのページ

サイト内にあるコードを引用すると、画面を出すだけのコードは

-----以下引用

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

SDL_Surface* screen;

int main(int argc, char* argv[])
{
    /* SDLを初期化する */
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        fprintf(stderr, "SDLの初期化に失敗しました:%s\n", SDL_GetError());
        return -1;
    }
    /* 画面を初期化する */
    screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
    if (screen == NULL) {
        fprintf(stderr, "画面の初期化に失敗しました:%s\n", SDL_GetError());
        SDL_Quit();
        return -1;
    }
    /* 2000ミリ秒待つ */
    SDL_Delay(2000);
    /* 終了する */
    SDL_Quit();
    return 0;
}

----引用ここまで

なのですが、僕の場合は

  1. コンパイルが通らない
  2. コンパイルが通っても、ウィンドウが起動しない

というのがありました。解決策としては

1.コンパイルが通らない件に関して

どうやら SDL.h へのパスが悪かったようです。上記サイトのコードの最初、includeで

#include <SDL.h>

#include <SDL/SDL.h>

に変えてみたらコンパイルが通りました。

2. コンパイルが通っても、ウィンドウが起動しない件

これは、SDLの特有なのだと思いますが、通常c言語のファイルをコンパイルする時は

$ gcc test.c -o test

のようにしてあげるのですが、SDLを使う場合は

$ gcc test.c -o test -lSDL

のようにしてあげないといけませんでした(-lはアルファベット小文字のエルです。アイではないので注意)

この辺りが良くわかっていなかったから悩みました(^_^;)

他のライブラリを使うときは、それも指定してあげる

なので、最初のリンクである

第268回 SDLで夢のオリジナルゲーム開発:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

に戻りますが、コンパイルする際に

$ gcc -o sdltest sdltest.c -lSDL -lSDL_image -lSDL_ttf -lSDL_mixer

としています。ここでもまず -lSDL を指定してあげてますが、その他にも

-lSDL_image -lSDL_ttf -lSDL_mixer

の3つを指定してあげています。 これは、記事内にもあるように

SDL_image:各形式の画像ファイル操作機能を提供するライブラリ

SDL_mixer:各形式の音声ファイル操作機能を提供するライブラリ

SDL_ttf:TrueTypeフォントの文字列描画機能を提供するライブラリ

というのを使っているからです。 (そしておそらく外部ファイルとしてインストールしているからです)

とりあえず、画像ファイル操作、音声ファイル操作、フォント描画を行う時は コンパイルの時に指定してあげるのを忘れないようにしないと動かないみたいですね

すこしスッキリしましたのでもうちょっと勉強してみようと思います