Eclipse+MinGWでSDL2を静的リンクさせる覚書

More than 1 year has passed since last update.


概要

WindowsでEclipseを使いながらSDL2を使ったアプリケーションを作っていたところ、SDL2を静的にリンクさせることができたので、手順を書き残しておきます。


動作環境と前提条件


  • Windows10 64bit

  • Eclipse Mars.2 (4.5.2)


    • CDTが必要です。



  • SDL2(v2.0.4)

  • 今回は32bitの実行ファイルを作成します。


前準備


Eclipseのインストール

インストール自体の手順は省略します。

CDTは入れておいてください。


MinGWのインストール

ここからmingw-get-setup.exeを入手します。

インストーラにしたがってMinGWをインストールします。

今回は以下の場所にインストールしました。

C:\MinGW


SDL2のインストール

ここから入手します。

Development LibrariesのSDL2-devel-2.0.4-mingw.tar.gzです。

ファイルを展開して任意のディレクトリに保存してください。

今回は以下の場所に格納しました。

C:\dev\SDL2\i686-w64-mingw32


プロジェクトの作成と設定


プロジェクトの作成

EclipseのメニューからFile/New/Projectを選択して、New Projectウィンドウを出します。

C/C++ Projectを選択してNextをクリックします。

Project Nameを入力し、Project typeからはEmpty Projectを、ToolchainsからはMinGW GCCを選択してFinishをクリックします。


プロジェクトの設定

Project Explorerで作成したプロジェクトを選択し、メニューからProject/Propertiesを選択し、設定ウィンドウを出します。


  • 環境変数

    C/C++ Build/Environmentを選択します。

    MINGW_HOMEの値を、MinGWインストールしたパスに設定します。


  • ビルド設定

    C/C++ Build/Settingsを選択します。

    GCC C++ CompilerのIncludesを選択し、Include pathsにSDL2のincludeディレクトリのパスを追加します。

    今回の場合だと以下のようになります。

    C:\dev\SDL2\i686-w64-mingw32\include

    MinGW C++ LinkerのLibrariesを選択し、Library search pathにSDL2のlibディレクトリのパスを追加します。

    今回の場合だと以下のようになります。

    C:\dev\SDL2\i686-w64-mingw32\lib

    同じく、Librariesに以下の依存ライブラリを追加します。

    結構多いので参考に画像も撮りました。あと順番もこの通りにしてください。

    mingw32

    SDL2main

    SDL2

    SDL2_mixer(SDL2_mixerを使う場合のみ。今回は追加しなくて良い)

    m

    dinput8

    dxguid

    dxerr8

    user32

    gdi32

    winmm

    imm32

    ole32

    oleaut32

    shell32

    version

    uuid

    MinGW C++ LinkerのMiscellaneousを選択し、Linker flagsに以下を入力します。

    -static -mwindows

    以上です。



ソースコードを作成してビルドしてみよう

SDL2を使ったアプリケーションのサンプルコードとして、こちらを参考にします。

ほとんど流用ですが、SDL2のヘッダの指定が若干異なります。


main.cpp

#include <SDL2/SDL.h>


int main(int, char ** const) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("Hey", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, 0);
SDL_Renderer* render = SDL_CreateRenderer(window, -1, 0);

SDL_Event ev;
while(true){
SDL_SetRenderDrawColor(render, 0, 0, 0, 255);
SDL_RenderClear(render);
while(SDL_PollEvent(&ev))
{
if (ev.type == SDL_QUIT)
return 0;
}
SDL_SetRenderDrawColor(render, 255, 0, 0, 255);
SDL_RenderDrawLine(render,10, 10, 400, 400);
SDL_RenderPresent(render);
}

return 0;
}


ビルドが成功して実行すると、ウィンドウが立ち上がり、中に赤い線が表示されていると思います。


おわりに

ビルド後の実行バイナリのサイズですが、動的リンク時は150KB弱だったのが、静的リンク時は5000KBを超えました。これはデバッグ用のオプション設定での結果です。

今回はWindowsでSDL2のアプリケーションをビルドする際に、SDL2を静的リンクする手順を書きました。

ご指摘等ありましたら、コメントにてお願いします。

おしまい!