我可以在静态库中包装共享库以包含其依赖项吗?

时间:2014-04-14 12:59:52

标签: c++ gcc shared-libraries static-libraries dynamic-linking

我从第三方获得了一个共享库文件(称之为libfoo.so,我想将其链接到我的应用程序。我没有libfoo.so的源代码,只有它的关联C ++标头和由第三方提供的结果二进制文件。libfoo.so有一些共享库依赖项,最明显的是一些Boost库,例如libboost_thread.so.1.48。除此之外,依赖项列表相当薄(基本上只是libstdc++.so.6)。

这里有一个问题:我的应用程序大量使用Boost,它是针对较新版本v1.55而构建的。因此,如果我尝试将我的应用程序与它所需的v1.55库以及libfoo.so引入的v1.48库链接起来,我必然会遇到重复符号的问题;这不是首发。我可以通过一些工作将我的应用程序回滚到v1.48,但是我希望防止这种依赖性阻止我在将来更改Boost版本。

我可以创建某种中间产品,它位于libfoo.so和我的应用程序之间,可以将Boost依赖项相互分离吗?我发现了一些类似的SO问题,但我找不到任何能够捕捉到这种特殊情况的问题;它不是特定于Boost的本身,而是涉及设计一种方法将多个ABI不兼容的共享库版本链接到一个应用程序中。

我提出了一个粗略的想法(我甚至不确定是否可能):是否可以创建一个位于libfoo.so的包装器库并静态解析所有依赖关系?如果有一种方法我可以将libfoo.so和它链接到的各种共享库创建一个静态库,比如说libfoowrapper.a,我可以直接将它链接到我的应用程序中(注意我和我#39;小心不要将任何Boost内容泄漏到包装器库的界面中,以防止ABI与这两个版本不兼容)。

有没有办法完成这样的事情?起初,我使用gcc(Linux,MacOS)在类Unix平台上运行; Windows(使用Visual Studio)可能在将来。

0 个答案:

没有答案
相关问题