【问题标题】:Duplicated steps when linking to static libraries in Eclipse CDT链接到 Eclipse CDT 中的静态库时的重复步骤
【发布时间】:2013-03-04 19:49:49
【问题描述】:

我在 Ubuntu v12.10 上使用 Eclipse CDT/CodeSourcery Lite 交叉编译我的 C 项目。

在 Eclipse CDT 中,我有这三个 C 项目:

  1. exeTop // 使用 libmiddle.a 中定义的函数的可执行文件
  2. libmiddle.a // 使用 libbottom.a 中定义的函数的静态库
  3. libbottom.a // 独立静态库 依赖于任何其他库

为了构建 libmiddle.a,我必须将 libbottom.a 复制到 libmiddle 的项目文件夹中(参见说明 here),因为 libmiddle.a 依赖于 libbottom.a。

但是在构建 exeTop 时,我不仅要链接到 libmiddle.a,还要链接到 libbottom.a(libmiddle.a 已经链接到)。

第一季度。为什么需要从 exeTop 链接到 libbottom.a?

第二季度。有没有我可以使用的编译器或链接器选项,以便我可以从 exeTop 链接到 libmiddle.a?

【问题讨论】:

    标签: c ubuntu static-libraries eclipse-cdt cross-compiling


    【解决方案1】:

    您说“为了构建 libmiddle.a,我必须链接到 libbottom.a,这是有道理的,因为 libmiddle.a 依赖于 libbottom.a。”我认为根本不是这种情况。事实上,libmiddle.a 不能真正链接到 libbottom.a,因为这不是静态库在 Linux 上的工作方式。静态库只是目标文件的“档案”,并没有使它们依赖于其他静态库的功能。将静态依赖项填充到静态库本身中也不常见。

    更多详情请见[UNIX] : Do I need to add all libraries in my project's makefile, that are used from a library, used in my project?

    【讨论】:

    • 澄清一下,为了正确构建 libmiddle.a,我必须将 libbottom.a 复制到 libmiddle 的项目文件夹中。
    • 这是为什么呢?构建 libmiddle 不应该需要 libbottom。失败的命令行是什么?
    • 我错了!是的你是对的。我刚刚尝试从 libmiddle 中删除 libbottom,而 libmiddle 确实在没有 libbottom 的情况下构建。
    • 顺便感谢您提供的链接。那么我应该创建共享对象(libbottom.so 和 libmiddle.so)并从 extTop 链接到它们吗?
    • 如果您不介意在可执行文件旁边部署共享库,您应该这样做。但是,如果您只是想避免重复的依赖项并保留单个静态链接的二进制文件,那么您已经在那里了。
    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2011-01-20
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多