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

相关推荐
一丝晨光2 天前
编译器、IDE对C/C++新标准的支持
c语言·开发语言·c++·ide·msvc·visual studio·gcc
一丝晨光3 天前
GCC和clang的爱恨情仇
macos·objective-c·xcode·apple·clang·gcc·llvm
Amd79410 天前
Nuxt.js 应用中的 nitro:build:before 事件钩子详解
自定义·生命周期·配置·优化·nuxt·构建·钩子
云中双月12 天前
如何使用Ida Pro和Core Dump文件定位崩溃位置(Linux下无调试符号的进程专享)
linux·嵌入式·gdb·调试·gcc·崩溃·ida pro·ulimit·core dump·cross compile
witton19 天前
C语言实现Go的defer功能
c语言·clang·gcc·defer·attribute·cleanup·block type
码匠许师傅21 天前
【开源鸿蒙】OpenHarmony 5.0轻量系统最小开发环境搭建
python·pip·risc-v·openharmony·gcc·1024程序员节·hi3861
Amd79423 天前
Nuxt.js 应用中的 builder:generateApp 事件钩子详解
生命周期·应用·配置·优化·nuxt·生成·钩子
程序猿(攻城狮)23 天前
CentOS 7 安装gcc编译环境
linux·centos·gcc
Amd79424 天前
Nuxt.js 应用中的 build:manifest 事件钩子详解
自定义·优化·nuxt·控制·清单·构建·钩子
bug菌¹25 天前
滚雪球学Redis[7.2讲]:Redis缓存系统的应用与优化:原理、场景与失效策略
java·redis·缓存·应用·优化