当有人说在动态链接中链接器在运行时解析共享库的地址时,这是否意味着运行时调用的链接器与静态链接器中使用的链接器相同?例如,当使用 gcc 时,如果gcc mysource.c -o myprog
使用动态链接,是否会跳过链接步骤?如果使用动态链接,每次运行程序时是否都会调用相同的 gcc 链接器,或者这个链接器是否有所不同(即随操作系统一起提供)?
如果使用动态链接,而从技术上讲,输出可执行文件时链接尚未发生,那么文件怎么会是可执行的(因为它错过了链接阶段)?还是直到动态链接发生后它才真正可执行?
答案1
“可执行”仅表示“能够被加载程序加载”。加载程序负责动态链接。编译时链接器在可执行文件的标头中写入有关使用哪些库和符号的信息,加载程序读取此信息以执行链接。