将 .so 合并到另一个 .so 中而不依赖?

Posted

技术标签:

【中文标题】将 .so 合并到另一个 .so 中而不依赖?【英文标题】:incorporate .so into another .so without dependency? 【发布时间】:2010-08-26 00:39:09 【问题描述】:

我有一个 c 程序,它依赖于我可以控制其编译的第二个库。我希望能够将我的程序编译成共享对象库,而无需链接到第二个库。换句话说,我最后想要一个单一的整体共享对象库。我该怎么做?

如果我将第二个库单独编译成 .so 并在编译我的程序时将其作为依赖项包含在内,我可以看到当我在二进制文件上运行 ldd 时我需要该文件。

【问题讨论】:

你的“程序”也是一个库吗?我问是因为你说过你想把你的程序编译成一个共享对象库。 【参考方案1】:

您需要将您的第二个库编译为 .a(静态库)并将其静态链接到您的 c 程序中。

静态链接是当目标文件在编译时链接并且是最终二进制文件的一部分时,生成的可执行文件可以在没有依赖关系的情况下执行..

共享库 (.so) 在运行时链接,并且在您执行链接它们的二进制文件时必须可用。

静态链接的 gcc 标志是:-static 这将自动搜索 .a 文件。

【讨论】:

【参考方案2】:

上面拉德曼所说的。

http://www.network-theory.co.uk/docs/gccintro/gccintro_25.html

【讨论】:

以上是关于将 .so 合并到另一个 .so 中而不依赖?的主要内容,如果未能解决你的问题,请参考以下文章

如何将本地未提交的更改合并到另一个 Git 分支?

多个so合并为一个so的思路

Linux下共享库嵌套依赖问题 (转载)

Android studio插件,检查依赖的so是否支持64位(或者其他的abi)

哪里能下载到libvi_voslib.so文件

如何在Android Gradle中添加原生so文件依赖