080504


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

080504

パソコン死んだり事故ったりサーバー代払えてなかったり毎日が充実しすぎてて大変!

testspriteをコンパイルする

ダウンロードしたSDLのファイル群の中に、testというディレクトリが存在すると思います。
その中にはSDLのテスト用のコードが入っています。
今回はそのなかの「testsprite.c」をコンパイルしてみましょう。
普通に、
$ gcc testsprite.c -o testsprite.exe
などとしてもたくさんエラーがでて悲しい気持ちになると思います。
gccに適切なオプションをつけてコンパイルしてみて下さい。

という課題にしようと思ったんですが、多分誰もできないと思うので「sdl-config」について説明しておきます。
実は前回のインストールで、sdl-configとかいうコマンドが使えるようになっていると思います。
$ sdl-config
Usage: sdl-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags]
[--libs] [--static-libs]
これは、コンパイラに適切なオプションを指定するためのコマンドです。
とりあえず sdl-config --cflags --libs を実行してみましょう。
$ sdl-config --cflags --libs
-I/usr/local/include/SDL -Dmain=SDL_main
-L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows
何かそれっぽいものが出力されました。早速試してみます。
$ gcc testsprite.c -o testsprite.exe -I/usr/local/include/SDL -Dmain=SDL_main -
L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -lmingw32
collect2: ld returned 1 exit status
はい、ローダがこけました!なんでだ!正直意味が分からないのですが何故かmingw32が存在しないらしいので、適当に外します。
$ gcc testsprite.c -o testsprite.exe -I/usr/local/include/SDL -Dmain=SDL_main -
L/usr/local/lib -lSDLmain -lSDL -mwindows
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):: undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status
はい、ローダがこけました!なんでだ!多分mingw32のオプション外した関係でWinMain周りがおかしいんだと思います正直よくわかりません。
仕方がないので-Dmain=SDL_mainを外します。理由はあまり説明したくありません。黒魔術です。
$ gcc testsprite.c -o testsprite.exe -I/usr/local/include/SDL -L/usr/local/lib -lSDLmain -lSDL -mwindows
通ったー!
みんなの環境ではもっとスムーズに通ってくれるといいなと思いました。

出来た人は実行結果がどんなだったか niha28@gmail.com まで。

追記:
どうしても駄目な人は以下のサンプルコードを。
#include <SDL/SDL.h>

int main(){
	SDL_Init(SDL_INIT_VIDEO);
	SDL_Quit();
	return 0;
}