我创建了一个动态(.so)库,它为我需要的存储后端捆绑了一些功能 实际上,它提供了一个已知的接口,并为memcached,mysql,sqlite ......等提供后端。
现在我的问题是我的共享库依赖于libmemcached,libsqlite3,libmysqlclient等等,我不知道如何打包它,因为只想要sqlite的客户端不需要安装libmemcached。
我一直在考虑将它拆分到不同的库中,但似乎我最终会得到近20个.so库,我不喜欢这个想法。
任何替代方案?
答案 0 :(得分:3)
一种替代方法是在您创建的共享库中放置一个接口,这允许它在运行时加载依赖项。所以,作为一个例子,你可以分开 不同组件的init函数:
init_memcached();
init_sqlite();
使用dlopen()和朋友实现这些初始化函数。
答案 1 :(得分:2)
您可以使用dlsym
和dlopen
使用dynamic loading。
这种方法的优点是,当在客户端找不到共享库时,您的应用程序将正常运行。
答案 2 :(得分:0)
您可以在运行时只加载所需的共享库,但在我看来,它不是那么好的方法。
我会分割共享库,但不会分成20个库。看看你是否可以对一些常用功能进行分组。