Function 如何将两个共享库中具有相同名称的函数链接起来

Function 如何将两个共享库中具有相同名称的函数链接起来,function,shared-libraries,Function,Shared Libraries,我有一个使用两个共享库的可执行文件(shar1.so,shar2.so) 共享库使用相同的静态库(stat.a) 但这并不是因为多重定义而产生任何链接器错误 不知道原因 不知道原因 原因很简单:UNIX上的共享库的行为与归档库的行为相同 假设您有定义函数foo的foo1.o,以及同样定义foo的foo2.o(可能有不同的实现)。假设您将foo1.o放入libfoo1.a并将foo2.o放入libfoo2.a 如果您了解UNIX链接器是如何使用的,则可以预测当您像这样链接程序时会发生什么: gcc

我有一个使用两个共享库的可执行文件(shar1.so,shar2.so) 共享库使用相同的静态库(stat.a)

但这并不是因为多重定义而产生任何链接器错误

不知道原因

不知道原因

原因很简单:UNIX上的共享库的行为与归档库的行为相同

假设您有定义函数
foo
foo1.o
,以及同样定义
foo
foo2.o
(可能有不同的实现)。假设您将
foo1.o
放入
libfoo1.a
并将
foo2.o
放入
libfoo2.a

如果您了解UNIX链接器是如何使用的,则可以预测当您像这样链接程序时会发生什么:

gcc -o t main.o -L. -lfoo1 -lfoo2   # or
gcc -o t main.o -L. -lfoo2 -lfoo1
好的,如果您现在将
foo1.o
链接到
libfoo1.so
foo2.o
链接到
libfoo2.so
,并使用上述命令,将发生完全相同的行为(即使该行为发生的细节非常不同)。

检查此链接