链接到共享符号名称的库的程序运行错误
这有点难以理解,但我正在尽我所能。
在Red Hat 6.4上使用gcc 4.4.6和ld 2.20.51,
我从一个共享库(.so)和一个静态库(.a)链接到二进制可执行PROGRAM代码。
共享库公开由PROGRAM直接调用的API。 该共享库的实现是针对静态库静态库lib1编译和链接的。
静态库还公开了自己的API,它由PROGRAM直接调用。 它的一些实现是基于直接复制到其中的静态lib1文件的一个子集。
任何API(任一库)都没有实际公开数据类型或静态lib1实现的函数。
因为代码被复制,所以符号是相同的。
在运行时我看到这种行为:
- 如果链接库的顺序是共享库 , 静态库 ,那么调用共享库API并调用静态库* API都将使用** static lib1中的实现 。
- 如果链接器的库顺序是静态库 , 共享库 ,那么调用共享库API并调用静态库API都将使用静态库1中的实现– 来自lib1的代码修改 。
如何调用静态库API以在lib 1中修改代码中运行实现,而在共享库API中运行实现在静态lib1中 ?