建立动态链接的过程如下:
动态链接器自举。动态链接器本身不依赖任何共享对象,通过一段精巧的启动代码完成自身全局和静态变量的重定位,在过程中又不会用到全局和静态变量,这个有限制条件的启动代码过程被称为自举。
将依赖的共享对象映射到进程空间。完成自举后,动态连接器将可执行文件和链接器本身的符号表都合并到一个全局符号表(Global Symbol Table)中,然后连接器开始寻找执行文件所依赖的共享对象(可执行文件的".dynamic"段中,有一种类型时DT_NEED,它标明了可执行文件所依赖的共享对象)。由此链接器将按照广度搜索算法(也可以时其他搜索算法)将所有依赖的共享对象的名字放入一个集合容器中,然后读取相应的ELF文件头和“.dynamic”段,然后将它相应的代码段和数据段映射到进程空间中。
开始重定位和初始化。完成上述步骤后,所有依赖的共享对象已全部映射到进程空间。