Zha_World
桃子啊土豆
2017-03-24 07:29
采纳率: 100%
浏览 2.6k
已采纳

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的参数设置没有正确,请问是这样吗,具体错哪里了?正在看《程序员的自我修养》,这是里面的一个例子。
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • dashicaineng
    已采纳
    点赞 评论
  • Zha_World
    桃子啊土豆 2017-03-26 11:05

    补充问题

    只要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命令也看不大懂每段具体是什么,求大神指点

    点赞 评论
  • qq_37040503
    I_T_Dark 2019-09-08 10:09

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

    点赞 评论

相关推荐