在动态链接下,程序模块之间包含大量的符号引用,所以在程序开始执行前,动态链接会耗费不少时间用于解决模块间的符号引用的查找和重定位。在一个程序中,并非所有的逻辑都会走到,可能直到程序执行完成,很多符号(全局变量或函数)都并未被执行(比如一些错误分支)。因此如果在程序执行前将所有的外部符号都进行链接,无疑是一种性能浪费,同时也极大地拖累了启动速度。所以 ELF 采用了一种延迟绑定(Lazy Binding)的做法,思想也比较简单,当外部符号第一次使用时进行绑定(符号查找、重定位等),第二次使用时直接使用第一次符号绑定的结果。