【问题标题】:Create a shared library that subsumes its link-time library dependencies创建一个包含其链接时库依赖项的共享库
【发布时间】:2014-07-29 14:56:44
【问题描述】:

我正在尝试打包一些本地库以包含在 java natives .jar 中。目前,我们的目标是 32 位和 64 位 linux 和 windows,macosx 即将推出(总共将产生 6 个变体)。此外,我们还有一些命名问题,如果我们可以将几个小库合并为一个大库,这些问题将得到解决。

我的目标是转化

my_library.so dependencyA-55.so dependencyB-50.so 

进入

my_library_without_dependencies.so

我有 dependencyAdependencyB 的完整(C 和 C++)源代码;但是,我宁愿不干预他们的编译,因为它非常复杂(ffmpeg)。我正在尝试使用 gcc 4.6(ubuntu 12.04 64 位)来解决这个问题,如果找到该解决方案,理想情况下应该适用于 64 位和 32 位 linux,以及 64 位和 32 位 Windows 架构(跨- 通过 mingw32 编译)。

是否有任何神奇的链接器选项组合会导致 GCC 将依赖项包含到单个最终共享库中?我专心地看着the linker options 没有成功,相关的 SO 问题没有解决这个用例。

【问题讨论】:

  • 不可能,相反,您可以将静态库创建为“dependencyA.a”和“dependencyB.a”(因为您有源代码)并在创建时使用“--whole-archive”链接器开关“my_library.so”
  • 谢谢 - 经过大量的额外浏览,我收集到了尽可能多的信息。如果你回答你的评论,我会接受。否则,我将删除问题。
  • 好的,我已将其发布为答案。希望它会帮助某人。

标签: linux gcc linker shared-libraries


【解决方案1】:

这是不可能的。

共享对象已经是链接器的产物,并且处于可以执行的形式。

相反,您可以将静态库创建为“dependencyA.a”和“dependencyB.a” (因为您有源代码)并在创建“my_library.so”时使用“--whole-archive”链接器开关

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多