gcc: -O2 优化选项的一个副作用:可以掩盖链接,符号未定义错误 undefined reference to

这个-O2 优化选项,可以掩盖链接错误。因为这个包含130多项的优化选项。里面有关于四代码的优化。

假如一个函数A里调用了另一个函数B,但是函数B是外部定义的符号,而且没有定义。

同时如果A函数是个死函数的话,-O2,可能将这个函数A优化为如下的方式,直接返回。看似从未调用这个函数。

c 复制代码
(gdb) disass set_shared_ip_state_down
Dump of assembler code for function A:
   0x000000001008f4c0 <+0>:     mov    $0x1,%eax
   0x000000001008f4c5 <+5>:     retq

所以看问题时,需要注意这一点,如果用-O2 编译链接工程,没有问题。并不一定代表去掉 -O2 就可以链接成功。

相关推荐
huangyuchi.4 天前
【Linux】编译器gcc/g++及其库的详细介绍
linux·运维·服务器·笔记·编译器·gcc·g++
爱出名的狗腿子5 天前
vscode + cmake + ninja+ gcc 搭建MCU开发环境
ide·vscode·单片机·c·cmake·gcc·ninja
Mr_Chenph10 天前
VSCode + GD32F407 构建&烧录
vscode·单片机·gcc·gd32f407
Tipriest_13 天前
ubuntu20.04&vscode使用C++20(调整gcc版本&vscode设置)
ide·vscode·c++20·gcc
belldeep14 天前
C语言:gcc 或 g++ 数组边界检查方法
c语言·gcc·数组边界检查
Strugglingler14 天前
编译器ar命令参数
linux·ar·gcc
Think Spatial 空间思维15 天前
【SSL部署与优化】OCSP Stapling配置指南:减少证书验证延迟
网络·网络协议·https·部署·ssl·优化
百年孤独百年19 天前
Conda 环境下安装 GCC 和 glibc (crypt.h) 教程
conda·glibc·gcc·图像恢复·低光照增强
咖喱年糕20 天前
【Linux】系统指令与开发全栈(vim、ssh、gcc)
linux·ssh·vim·gcc
Think Spatial 空间思维21 天前
【SSL部署与优化】HTTP/2与HTTPS的协同效应
安全·http·https·部署·ssl·优化