Code::Blocksを使用してのWindows環境C++言語SDLライブラリ使用方法

Windows上でのCode::Blocks上でSDL(Simple DirectMedia Layer)ライブラリを使用する方法です。

Code::Blocksを使用してのWindows環境C++言語CLIアプリ開発方法チュートリアルの通りに環境構築してある前提での説明をします。

 

SDL(Simple DirectMedia Layer)ライブラリのダウンロード

以下のURLからSDLをダウンロードしておきます。

SDL自体のビルドも必要ですが、すでにビルド済みのバイナリが同封された「SDL2-devel-2.30.6-mingw.zip」を使用します。

 

SDL(Simple DirectMedia Layer)ライブラリのフォルダ構造

「SDL2-devel-2.30.6-mingw.zip」を解凍します。

「SDL2-2.30.6」フォルダ内は以下のようになっています。

D:.
├─cmake
├─docs
├─i686-w64-mingw32
│  ├─bin
│  ├─include
│  │  └─SDL2
│  ├─lib
│  │  ├─cmake
│  │  │  └─SDL2
│  │  └─pkgconfig
│  └─share
│      └─aclocal
├─test
│  ├─emscripten
│  ├─n3ds
│  ├─nacl
│  └─shapes
└─x86_64-w64-mingw32
    ├─bin
    ├─include
    │  └─SDL2
    ├─lib
    │  ├─cmake
    │  │  └─SDL2
    │  └─pkgconfig
    └─share
        └─aclocal

ここで重要なのが「i686-w64-mingw32」フォルダと「x86_64-w64-mingw32」フォルダです。

32bitコンパイラ向けが「i686-w64-mingw32」。

64bitコンパイラ向けが「x86_64-w64-mingw32」。

Code::Blocksを使用してのWindows環境C++言語CLIアプリ開発方法チュートリアルの通りであれば64bit版のコンパイラを使用しているので、「x86_64-w64-mingw32」フォルダ内のファイルを使用することになります。

 

プロジェクトの作成

Code::Blocks Windows SDL Library 001

Code::Blocksを使用してのWindows環境C++言語CLIアプリ開発方法チュートリアルの通りにコンソールプロジェクトが作成されていれば問題ありません。

今回はDドライブ直下に「sdl_test」というプロジェクトを準備しました。

 

Code::Blocks Windows SDL Library 002

先ほど解凍したSDLライブラリのフォルダをプロジェクトフォルダ内に移動しておきましょう。

 

プロジェクトのビルドターゲット設定

Code::Blocks Windows SDL Library 003

上部メニューから「Project」→「Properties...」を開きます。

「Build targets」タブを開き、左の「Build targets」欄から、「Debug」と「Release」をそれぞれ設定する必要があります。

「Selected build target options」欄で「Type」を「Console application」にするか、「GUI application」にするかです。

コンソールアプリケーションのままでビルドを行うと、アプリケーションのウィンドウ以外にコンソール窓も表示されます。

デバッグの際は便利かもしれませんが、公開する場合のリリースビルドに関してはどうでしょう?

私は「GUI application」にしておきました。

 

プロジェクトのビルドオプション設定

上部メニューから「Project」→「Build options...」を開きます。

こちらも左側のツリーから「Debug」と「Release」それぞれビルドごとに設定があります。

 

「Search directories」タブにて設定するもの

Code::Blocks Windows SDL Library 004 Code::Blocks Windows SDL Library 005

タブ中の「Compiler」タブにて、「Add」、「SDL2-2.30.6\x86_64-w64-mingw32\include」相対パスを追加。

フォルダ指定する際に「Keep this as a relative path?」と相対パスにするかどうか聞かれるので「はい(Y)」で相対パスにしておきます。

プロジェクトディレクトリからの相対パスにしておけば、プロジェクトフォルダを移動しても読み込まれるでしょう。

(プロジェクトフォルダ内にSDLライブラリが存在する必要はあります)

タブ中の「Linker」タブにて、「Add」、「SDL2-2.30.6\x86_64-w64-mingw32\lib」相対パスを追加。

ここにはビルド済みのSDLライブラリがあります。

なお、32bitのコンパイラを使用している場合には、ビルドに失敗すると思うので適した方を使用してください。

 

「Linker settings」タブにて設定するもの

Code::Blocks Windows SDL Library 006

「Other linker options」に次のセクションの内容を入力する。

Code::Blocksを使用してのWindows環境C++言語CLIアプリ開発方法チュートリアルの通りに環境構築してあれば、グローバルのコンパイラーセッティング(「Settings」→「Compiler」)にて静的リンク(static)設定にしてあるので注意してください。

これはプロジェクトオプション(「Project」→「Build options...」)側には表示されませんが反映されていますので、こちらで動的リンクにしてある(static指定を外す)からといって、動的リンクでビルドされるとは限りません。

必ず、グローバルのコンパイラセッティングも見ておきましょう。

 

SDLのリンク設定について

動的と静的でリンクが必要なライブラリが異なります。

動的リンクする場合

-lmingw32 -lSDL2main -lSDL2 

 

静的リンクする場合

上記、動的リンクのオプションに加えて、以下のオプションが必要

-Wl,--dynamicbase -Wl,--nxcompat -Wl,--high-entropy-va -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid 

 

動的リンクの場合は、「SDL2.dll」と「libstdc++-6.dll」「libwinpthread-1.dll」「libgcc_s_seh-1.dll」等が要求されます。

(SDL2.dll以外のDLLはC:\Program Files\CodeBlocksにあります)

dllはexeと同じディレクトリ、もしくはWindowsインストールディレクトリ内のSystemフォルダなどに入れておく必要があります。

バイナリを配布する場合にはDLLも同封しないといけません。

他の環境で動かす場合に手間がかかりますので、私は基本的に1つのexeにまとめるため静的リンクにしてしまっています。

exeファイルのサイズが大きくなってしまいますが、他にDLLを必要としなくなるので便利でしょう。

 

SDLのコードを動かす

冒頭に #include <SDL2/SDL.h> と書きます。

それ以降はSDLで記述すれば動作します。

 

SDLの応用

SDLを使用した上での応用例です。