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

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

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

我一直在考虑把它分成不同的图书馆,但是好像我最终会得到20个左右的图书馆,我不喜欢这个想法。

任何替代?

另外一种方法是在你创建的共享库中放置一个接口,这样可以在运行时加载依赖关系。 所以,作为一个例子,你可以为不同的组件分别设置init函数:

init_memcached(); init_sqlite(); 

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

你可以使用动态加载使用dlsymdlopen 。 这种方法的优点是当客户端没有找到共享库时,你的应用程序可以正常运行。

你可以在运行时只加载需要的共享库,但在我看来,这是不是很好的方法。

我会拆分共享库,但不能分成20个库。 看看你是否可以分组一些常见的功能。