man ld
有以下要说的-z lazy
:
...告诉动态链接器将函数调用解析推迟到调用函数时...延迟绑定是默认值。
另一方面,gcc --verbose main.c
传递-z now -z relro
给 ld 的 main.c 为空main()
$ gcc --verbose main.c
Using built-in specs.
COLLECT_GCC=gcc
[...]
Thread model: posix
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
[...]
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-linux-gnu/7/collect2 [...] -pie -z now -z relro [...]
我在默认安装 gcc 的 Ubuntu 18.04 和 19.04 中看到了这一点。
所以-z lazy
可能是 ld 的默认值,但是 gcc 在哪里/为什么将其更改为-z now -z relro
?