为什么缺少共享的图书馆会致命?

Max*_*xpm 2 compiler-construction linker gcc dynamic-linking

g++ -o Test Test.cpp -lTest
/usr/bin/ld: cannot find -lTest
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

如果在运行时按需加载共享/动态库中的符号,为什么在编译时缺少库会导致致命错误?

gee*_*aur 5

  1. 在运行时可能难以处理库间依赖性; 编译时检查允许链接器检测并有时解析依赖循环,并将任何其他库依赖项添加到运行时链接列表中.
  2. 您是否希望在编译/链接时或运行时发现拼写错误的符号名称?大多数人更喜欢前者,因此链接器检查所有符号是否已解析,而不是将其推迟到运行时加载器; 这当然要求所有库都存在.
  3. 假设一个动态库需要一个静态库,否则将无法链接.在大多数平台上,你不能(或不能理智或安全地)在运行时加载静态库,因此链接器需要处理这些在链接时.(这实际上是#1的子案例.)