为什么共享库丢失会致命?

问题描述 投票:0回答:1
g++ -o Test Test.cpp -lTest
/usr/bin/ld: cannot find -lTest
collect2: ld returned 1 exit status

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

gcc linker dynamic-linking
1个回答
5
投票
  1. 运行时库间依赖关系可能很难处理;编译时检查使链接器可以检测并有时解决依赖关系循环,并将任何其他库依赖项添加到运行时链接列表中。
  2. 您希望在编译/链接时或运行时发现符号名称拼写错误吗? 大多数人更喜欢前者,因此链接器检查所有符号是否都已解析,而不是将其推迟到运行时加载器;这当然需要所有图书馆都在场。
  3. 假设动态库需要存在静态库,否则静态库不会被链接。在大多数平台上,您无法(或无法理智或安全地)在运行时加载静态库,因此链接器需要处理这些在链接时。 (这实际上是 #1 的子案例。)
© www.soinside.com 2019 - 2024. All rights reserved.