我与两个不同的共享库链接。这两个库定义了一些具有相同名称但实现不同的符号。我无法使每个库在另一个库之上使用自己的实现。
例如,这两个库都定义了一个全局函数bar()
,每个库都从内部调用它。库1从foo1()
中调用它,而库2从foo2()
中调用它。
Lib1.so:
T bar
T foo1() // calls bar()
Lib2.so:
T bar
T foo2() // calls bar()
如果我将应用程序与Lib1.so链接,然后是Lib2.so,即使调用foo2(),也会调用来自Lib1.so的bar实现。另一方面,如果我将应用程序与Lib2.so链接,然后是Lib1.so,则始终从Lib2.so调用bar。
有没有办法使库始终优先使用自己的实现而不是其他任何库?