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