我有两个共享库。 lib使用dlopen
加载lib B.
他们实施相同的API。
我的客户端在同一系统上运行,当它尝试访问要加载哪个库的API时?
或者这是无效的事情?我必须使B成为一个静态库。
我的目标是让客户端只访问lib A.
答案 0 :(得分:0)
您是否掌控了客户端(即您可以重新编译它)?如果是这样,您可以在链接时指定库A;那么对dlopen
B来说,这将是A的关心。
如果您试图在B中劫持对函数foo
的调用,那么您的客户端正在尝试加载库B.您可以使用LD_PRELOAD
来强制它加载库A.然后客户端将发出对foo()
的调用,它将由A回答,在修改,更改和/或记录输入值和返回值后,它将能够将调用路由到foo()@B
。
您使用LD_PRELOAD=B.so ./client
而不是./client
致电您的客户。