链接所有链接到公共静态库的多个共享库

时间:2010-03-08 18:49:57

标签: c linux linker

假设您有两个共享库lib1.so和lib2.so,它们都将libcommon.a静态链接到它们中。如果要动态链接lib1.so和lib2.so,编译器是否会抱怨模糊的符号引用?或者编译器是否足够聪明,知道lib1和lib2之间共享libcommon符号,并允许您动态链接两者?

3 个答案:

答案 0 :(得分:3)

不存在冲突,因为当链接到共享库时,链接器将使用第一个提供符号的共享库中的定义,而不会进一步查看其他共享库。 .a中包含的符号将在两个共享库中导出,但不会发生冲突。

答案 1 :(得分:2)

静态库将用于内部解析链接,但外部链接不会传播到共享库接口,因此不存在冲突。每个共享库都包含自己的静态库代码副本。

答案 2 :(得分:0)

假设两个共享库与不同的静态库链接。但静态库都包含一个具有相同名称的函数。会有冲突。

我很确定,因为我有一个tcl / tk应用程序,它加载了两个tcl库(.so)。这两个库都与openssl库静态链接。但是版本不同。 运行tcl应用程序时发生分段错误。我将它追踪到openssl中。新版本中有一个功能实现已更改。