假设您有两个共享库 lib1.so 和 lib2.so,它们都将 libcommon.a 静态链接到其中。如果您动态链接 lib1.so 和 lib2.so,编译器会抱怨模糊的符号引用吗?还是编译器足够聪明,知道 libcommon 符号在 lib1 和 lib2 之间共享,并允许您对两者进行动态链接?
不会发生冲突,因为当您链接到共享库时,链接器将使用提供符号的第一个共享库中的定义,并且不会进一步查看其他共享库。从 .a 中包含的符号将在两个共享库中导出,但不会发生冲突。
静态库将用于内部解决链接,但外部链接不会传播到共享库接口,因此不会发生冲突。每个共享库都将包括其自己的静态库代码副本。