ログ日記

作業ログと日記とメモ

DebianでWindowsバイナリのクロスコンパイル

WindowsにMSYSをインストールしつつ、Emacsか適当なエディタを入れたりするのも大変だなとふと思ったので、メインで使っているDebianからWindowsのプログラムを作る。

http://pukiwiki.tuntunkun.com/index.php?%B8%C0%B8%EC%2FWindows%2F%A5%AF%A5%ED%A5%B9%A5%B3%A5%F3%A5%D1%A5%A4%A5%E9
ここや
http://repse.blogspot.jp/2008/07/mingw-colinux-debian-opengl.html
ここを参考に。

aptitude install mingw-w64

これで環境が手に入るので、早速ソースを書く。


Makefile

SRCS = main.c
OBJS = $(SRCS:.c=.o)
TARGET = main.exe

INSTALL_DIR = ~/vmware/XP/mingw/test/

CC = i586-mingw32msvc-gcc
CFLAGS = -O4 -Wall
LDFLAGS = -mwindows

.PHONY: all
all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)

.c.o:
	nkf -Us $< > $(subst .c,_sjis.c,$<)
	$(CC) $(CFLAGS) -o $@ -c $(subst .c,_sjis.c,$<)

.PHONY: clean
clean:
	rm -f $(TARGET)
	rm -f $(OBJS)
	rm -f *_sjis.c
	rm -f *~

install: all
	cp -f $(TARGET) $(INSTALL_DIR)


main.c

#include <windows.h>

int main(int argc, char **argv){
    MessageBox(NULL, "こんにちは世界!", "メッセージボックス", MB_OK);
    return EXIT_SUCCESS;
}

makeでビルド完了。
Debianでも動作確認したいのでwineを入れる。

wine main.exe

 It appears that libnss-mdns is installed on your system,
 but lib32nss-mdns is not. Please note that Wine will not be
 able to access the Internet unless you either install
 lib32nss-mdns (or ia32-libnss-mdns), or uninstall libnss-mdns.

エラーが出た。

aptitude install lib32nss-mdns

これで完了。