win7下gcc链接器ld返回错误:undefined reference to '__main'

windows系统下gcc编译器ld器报错

代码文件:a.c和b.c

/*a.c*/
extern int shared;
void swap(int*,int*);
int main()
{
    int a = 100;
    swap(&a,&shared);
}

 /*b.c*/
int shared = 1;
void swap(int * a,int * b){
    *a^=*b^=*a^=*b;
}

运行结果

  • 单独使用gcc命令不出错 图片说明

可以正确生成ab.exe文件执行。

  • 分步编译链接出错 图片说明

提示如上图。

  • 网上说是ld的参数设置没有正确,请问是这样吗,具体错哪里了?正在看《程序员的自我修养》,这是里面的一个例子。

http://bbs.csdn.net/topics/390536522

补充问题

只要main函数名改作其他的名字,比如teset(),或者ss()等,分步编译的结果就可以成功,这让我更加疑惑了

 /*a.c*/
extern int shared;
void swap(int*,int*);
int ss() //int main(),修改的地方
{
    int a = 100;
    swap(&a,&shared);
}

 /*b.c*/
int shared = 1;
void swap(int * a,int * b){
    *a^=*b^=*a^=*b;
}

分步编译的指令仍然是:gcc -c a.c b.c ld a.o b.o,这样的结果我不清楚是什么原因,nm命令也看不大懂每段具体是什么,求大神指点

我的是加了一个 -fno-stack-protector 解决的