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 就可以链接成功。

相关推荐
hqxstudying17 天前
MySQL 数据库索引详解
mysql·优化·索引
留待舞人归22 天前
【Unity3D优化】优化多语言字体包大小
游戏·unity·游戏引擎·unity3d·优化
留待舞人归1 个月前
【Unity优化】提高热更新和打包速度
游戏·unity·游戏引擎·unity3d·优化
十五年专注C++开发1 个月前
CMake基础:gcc/g++编译选项详解
开发语言·c++·gcc·g++
huangyuchi.1 个月前
【Linux】编译器gcc/g++及其库的详细介绍
linux·运维·服务器·笔记·编译器·gcc·g++
爱出名的狗腿子1 个月前
vscode + cmake + ninja+ gcc 搭建MCU开发环境
ide·vscode·单片机·c·cmake·gcc·ninja
Mr_Chenph1 个月前
VSCode + GD32F407 构建&烧录
vscode·单片机·gcc·gd32f407
Tipriest_1 个月前
ubuntu20.04&vscode使用C++20(调整gcc版本&vscode设置)
ide·vscode·c++20·gcc
belldeep1 个月前
C语言:gcc 或 g++ 数组边界检查方法
c语言·gcc·数组边界检查
Strugglingler1 个月前
编译器ar命令参数
linux·ar·gcc