SDL_imageを導入する時、気を付けなければいけないことについて備忘録として残す。
導入方法と言いつつ、ダウンロードしてSDLと関連付けてビルドするところまで端折る。なぜなら、他のサイトで画像つきで解説しているので冗長だから。
当記事では以下の環境を使用しています。
SDL_image1.2.12
SDLのバージョン1.2
まず、SDL_imageをHGからCloneしてSDLとリンクさせてビルドさせる場合、pngやjpgを読み込むときにexeと同じ位置に、SDL_image\VisualC\external\lib\x86にあるlibpng15-15.dllやlinjpeg-8.dllを配置しないといけない。
基本的にdllを配置して実行環境を構築したくないので、staticlibでビルドする方法を考える。
まず、どこでDLLの読み込み指定を行っているのか?
これはSDL_imageのプロジェクトプロパティのプリプロセッサ項目に以下のような項目がある。
(一部抜粋)
[html]
LOAD_JPG_DYNAMIC=\"libjpeg-8.dll\"
LOAD_PNG_DYNAMIC=\"libpng15-15.dll\"
LOAD_TIF_DYNAMIC=\"libtiff-5.dll\"
LOAD_WEBP_DYNAMIC=\"libwebp-2.dll\"
PNG_USE_DLL
ZLIB_DLL
[/html]
これらの項目が定義されているとSDL_imageは実行時にDLLを読み込もうとするので、これらの定義を削除してやれば外部参照が未解決状態になり、各ライブラリへのリンクを求められる状態になります。
ここでは、ライセンス的に安全とわかっているlibpngのみ削除してstaticlibでリンクします。
削除する項目は「LOAD_PNG_DYNAMIC~」と「PNG_USE_DLL」「ZLIB_DLL」です。後者二つのプリプロセッサはプロジェクトで使用していないようですが、 DLLの使用を示唆する記述は削除しておきました。
この状態までくれば後は必要なライブラリを関連付けしてビルドしてやれば静的リンクを行ったバージョンのSDL_image.libが出来上がります。SDL_image.libをリンクしたプロジェクト内でlibpng.libとzlib.libをリンクすることでも同様に実現可能でしょう。この辺りはケースバイケースなので、都合がいい方を選択するといいと思います。
最後になりますが、静的リンクを行う際にはライセンスを必ず確認してください。
今回はzlib/libpngライセンスを使用しているlipngとzlibのみ使用したので問題になりませんが、もしGPL/LGPLだった場合、ソースを静的にリンクするとライセンスに感染してしまうのでフリーウェアとして開発していない場合は注意してください。
0 件のコメント:
コメントを投稿