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

时间:2016-04-21 17:02:13

标签: c linux static-linking dynamic-linking

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

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

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

共享库公开由PROGRAM直接调用的API。这个共享库的实现是编译和放大的。链接到静态库静态lib1

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

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

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

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

  1. 如果链接库的库顺序为共享库静态库,则调用共享库API 并调用静态库* API将使用** static lib1
  2. 中的实现
  3. 如果链接库的顺序是静态库共享库,则调用共享库API 并调用静态库API 将使用静态库1中的实现 - 来自lib1修改的代码
  4. Diagram

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

0 个答案:

没有答案