2014 04 26 14 45 [c] 使用 MinGW gcc build wmain的程式碼

原來是想直接用c來寫個unicode程式, 卻發現MinGW gcc不支援wmain的寫法.
問了Google大神,結果還是沒有正式支援.
只好自己來workaround.

一開始查到的是可以在main自己call __wgetmainargs,再傳進去wmain裡面去.
可是這樣就變成main->wmain. 這樣有點醜.
就改成直接把entry point從c預設的,
(使用-nostartfiles 和 -Wl,-entry,_start)
變成自己來寫個function來處理,
處理完argc,argv後,再接回去 wmain 就好了.

這樣寫的缺點是可能有一些東西.並沒有被初始化.
要寫得比較完整應該要去參考 MinGW gcc 的 libcrt/crt/crt1.c

> gcc -O2 -nostartfiles -Wl,-entry,_start  test.c
========================================
#include <stdio.h>
extern int _CRT_glob;

int wmain(int argc, wchar_t *argv[],wchar_t *envar[])
{
  int i;
  printf("m argc=%d\n",argc);
  for (i=0;i<argc;i++) {
     printf("%d:%S\n",i, argv[i]);
  }
  return 0;
}

int start()
{
  int argc;
  wchar_t **argv;
  wchar_t **envar;
  __wgetmainargs(&argc, &argv, &envar, _CRT_glob, NULL);
  printf("s argc=%d\n",argc);
  return wmain(argc,argv,envar);
}
========================================

 更新: 附上自己根據crt1.c所修改出來的 minicrt.c