两个共享库实现相同的API

时间:2012-09-28 12:24:35

标签: c linux shared-libraries shared

我有两个共享库。 lib使用dlopen加载lib B.

他们实施相同的API。

我的客户端在同一系统上运行,当它尝试访问要加载哪个库的API时?

或者这是无效的事情?我必须使B成为一个静态库。

我的目标是让客户端只访问lib A.

1 个答案:

答案 0 :(得分:0)

您是否掌控了客户端(即您可以重新编译它)?如果是这样,您可以在链接时指定库A;那么对dlopen B来说,这将是A的关心。

如果您试图在B中劫持对函数foo的调用,那么您的客户端正在尝试加载库B.您可以使用LD_PRELOAD来强制它加载库A.然后客户端将发出对foo()的调用,它将由A回答,在修改,更改和/或记录输入值和返回值后,它将能够将调用路由到foo()@B

您使用LD_PRELOAD=B.so ./client而不是./client致电您的客户。