如何处理共享库中的依赖项,unix

时间:2010-11-19 12:41:52

标签: linux dependencies shared-libraries

我创建了一个动态(.so)库,它为我需要的存储后端捆绑了一些功能 实际上,它提供了一个已知的接口,并为memcached,mysql,sqlite ......等提供后端。

现在我的问题是我的共享库依赖于libmemcached,libsqlite3,libmysqlclient等等,我不知道如何打包它,因为只想要sqlite的客户端不需要安装libmemcached。

我一直在考虑将它拆分到不同的库中,但似乎我最终会得到近20个.so库,我不喜欢这个想法。

任何替代方案?

3 个答案:

答案 0 :(得分:3)

一种替代方法是在您创建的共享库中放置一个接口,这允许它在运行时加载依赖项。所以,作为一个例子,你可以分开 不同组件的init函数:

init_memcached();
init_sqlite();

使用dlopen()和朋友实现这些初始化函数。

答案 1 :(得分:2)

您可以使用dlsymdlopen使用dynamic loading。 这种方法的优点是,当在客户端找不到共享库时,您的应用程序将正常运行。

答案 2 :(得分:0)

您可以在运行时只加载所需的共享库,但在我看来,它不是那么好的方法。

我会分割共享库,但不会分成20个库。看看你是否可以对一些常用功能进行分组。