链接到共享符号名称的库的程序运行错误

这有点难以理解,但我正在尽我所能。

在Red Hat 6.4上使用gcc 4.4.6和ld 2.20.51,

我从一个共享库(.so)和一个静态库(.a)链接到二进制可执行PROGRAM代码。

共享库公开由PROGRAM直接调用的API。 该共享库的实现是针对静态库静态lib1编译和链接的。

静态库还公开了自己的API,它由PROGRAM直接调用。 它的一些实现是基于直接复制到其中的静态lib1文件的一个子集。

任何API(任一库)都没有实际公开数据类型或静态lib1实现的函数。

因为代码被复制,所以符号是相同的。

在运行时我看到这种行为:

  1. 如果链接库的顺序是共享库静态库 ,那么调用共享库API并调用静态库* API都将使用** static lib1中的实现
  2. 如果链接器的库顺序是静态库共享库 ,那么调用共享库API并调用静态库API都将使用静态库1中的实现– 来自lib1的代码修改

图

如何调用静态库API以在lib 1中修改代码中运行实现,而在共享库API中运行实现在静态lib1中