【问题标题】:Combining third-party static libraries into a stand-alone static library with cmake? [duplicate]用cmake将第三方静态库组合成独立的静态库? [复制]
【发布时间】:2013-04-10 14:39:21
【问题描述】:

所以我有libA.a libB.a libC.a libD.so 和一些链接到libPack.a 的代码。稍后,我将创建libFinal.so,它将链接到 libPack.a,并且 libFinal.so 最终用于可执行文件。

当链接器创建静态库时,我相信每个动态库都会在编译时解析并包含在静态库中。对于 (-fPIC) 第三方静态库,它是否也这样做?

如何使用 CMake 将一堆静态库和共享库组合成一个巨大的独立 libFinal.so 库?如果这不可能,是否意味着我必须向客户端提供所有 lib 依赖项?

我已经设法让可执行文件与一个没有依赖关系的虚拟库(没有libA...D)一起工作,但是当我使用链接到libA..D 的libPack.a 时,我得到了第三方库的未定义符号。我的猜测是libPack.a 中没有提供静态库,但我不确定发生了什么。

【问题讨论】:

  • 一个静态库没有被链接,把它想象成一个zip的目标文件。链接只发生在可执行文件和共享库上。
  • 我认为 undefined symbol 来自 libD.so 或您系统上的其他 3rd 方库

标签: c++ linker cmake static-linking


【解决方案1】:

以下答案可能有用: How to combine several C/C++ libraries into one?Merge multiple .so shared libraries

如果这满足您的需求,您可以配置 CMake 脚本以向项目添加一个预链接事件,该事件将库组合到 libFinal.so 中,并将 libFinal.so 进一步链接到可执行文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2021-08-27
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多