通过C中的库包装器自动重定向函数



假设我有两个库libA.solibB.so作为一些共享的C库。

A提供功能-F1、F2、F3
B可提供功能-F2、F3、F4

我的问题:创建一个瘦包装器库libC.so,它从libA.so调用F1F2,从libB.so调用F3F4

我知道的一种方法是在C.C中编写一个具有相同签名的函数,并在函数中使用dlopen分别调用libA.solibB.so

但这个问题感觉应该是可以实现的,而无需编写任何额外的代码,只需使用链接器工具将函数重定向到适当的库。

使用任何自动化工具创建这样的库libC.so真的可能吗?

这似乎是一个足够简单的问题,其他人在我之前肯定已经想到了,但我看不到如何自动创建这样一个库,也找不到任何适合自动包装器创建者的好资源。

您说得对,这样的包装器可以很容易地自动生成。一个现有的解决方案是Implib.so工具。在您的情况下,您可以使用它为libA和libB:生成具有有限接口的包装器

$ cat libA_syms.txt
f1
f2
$ implib-gen.py --symbol-list libA_syms.txt libA.so
Generating libA.so.tramp.S...
Generating libA.so.init.c...
$ cat libB_syms.txt
f3
f4
$ implib-gen.py --symbol-list libB_syms.txt libB.so
Generating libB.so.tramp.S...
Generating libB.so.init.c...

然后使用生成的代码创建一个包装器库:

$ gcc -shared -fPIC -fvisibility=hidden libA.so.* libB.so.* -o libC.so

有关完整示例,请参阅此文件。

最新更新