LoginSignup
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-15

概要

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を静的リンクする手順を書きました。
ご指摘等ありましたら、コメントにてお願いします。
おしまい!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2