[email protected] 0 15 ubuntu:~/taoge/cpp/test$ g++ c main.cpp main.cpp: In functi...">

当前位置:网站首页>GCC【7】- 编译检查的是函数的声明,链接检查的是函数的定义bug

GCC【7】- 编译检查的是函数的声明,链接检查的是函数的定义bug

2022-07-06 11:17:00 大城市的小蜗牛

项目场景:

  • 最近遇到一个问题, 下面来简化说下:
// int xxx();
 
int main()
{
    
    xxx();
}
  • 编译一下,自然编译不过, 信息为:
[email protected]:~/taoge/cpp/test$ g++ -c main.cpp 
main.cpp: In function ‘int main()’:
main.cpp:5:9: error: ‘xxx’ was not declared in this scope
     xxx();
         ^
[email protected]:~/taoge/cpp/test$ 
  • 打开上述的注释, 得到:
int xxx();
 
int main()
{
    
    xxx();
}
  • 编译一下, 能通过吗? 看看:
[email protected]:~/taoge/cpp/test$ g++ -c main.cpp     
[email protected]:~/taoge/cpp/test$ 
  • 链接一下, 发现xxx()未定义。
[email protected]:~/taoge/cpp/test$ g++ main.o
main.o: In function `main': main.cpp:(.text+0x5): undefined reference to `xxx()'
collect2: error: ld returned 1 exit status

从而印证题目中的问题。
我当时的纳闷是, xxx函数没有定义, 居然能通过编译。 确实能。 要区分编译和链接所做的事。
再仔细看看上述的英文提示, 编译不通过, 显示的是not declared, 而链接不通过, 显示的是undefined. 所以, 一目了然了。

原网站

版权声明
本文为[大城市的小蜗牛]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_46535940/article/details/125605279