【问题标题】:How to link static library into static library in Eclipse CDT如何在 Eclipse CDT 中将静态库链接到静态库
【发布时间】:2011-09-06 15:59:57
【问题描述】:

我有 3 个项目 A、B 和 C。 A 是通用的,被 B 使用,最终被 C 使用。 B 比较特殊,目前只有 C 使用。

现在我希望 A 和 B 尽可能多地被重用,我认为它们都是静态库。

所以我将 A 和 B 链接到静态库,将 C 链接到可执行文件,但是当我想链接 C 时 它在 A 函数上给了我一些 undefined reference 错误。因此,我将库 A 添加到链接器选项以解决此问题,但没有帮助。

所以我想:当我想部署 B 时,我还必须部署 A 才能进行链接。有没有办法将静态库 A 链接到静态库 B,这样我就不必部署 2 个文件?

如果是这样,我如何使用 Eclipse CDT 来实现这一点,因为我找不到为存档器定义其他目标的地方。

加法

我在 linux 下工作,但这些东西也应该在 windows 下工作。但主要是我需要一个 linux 的解决方案来继续开发。

编辑

现在我通过将 A 和 B 链接到静态库然后使用剩余的 *.o 文件将它们链接到可执行文件中“解决”了这个问题,但我不认为这很好。

【问题讨论】:

    标签: c++ linux linker static-libraries eclipse-cdt


    【解决方案1】:

    更改您的链接顺序。 C用B,B用A。C不直接用A吧?

    你写:

    gcc -o C -lA -lB
    

    它不会工作。你写

    gcc -o C -lB -lA
    

    它有效。

    如果是CDT,你可以去option->C/C++ Build->setting->XXX C linker->Libraries,改变A和B的顺序。

    另一种方式:使用 -u 选项。

    看到这个: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html 但是,我从来没有成功过。 谁能告诉我如何使用 -u 选项?

    【讨论】:

      【解决方案2】:

      一个静态库不能与另一个静态库链接。我认为因为静态库不是可执行代码,所以没有完成完整的链接过程(主要是引用解析)。它仅适用于动态库和可执行文件。

      【讨论】:

      • 所以你说我应该把它们编译成动态库?
      • 是的,单独部署B,不用C,最好做成动态库
      • 哦,抱歉忘了说我在 linux 下,但我正在尝试独立于平台。当然链接不能独立于平台,所以我首先需要一个工作的 linux 版本。
      • 我仍然希望将所有内容都链接到一个文件中,因此我只需分发一个可执行文件即可。
      • 我猜是因为它只是一个演示应用程序,应该尽可能简单地处理。
      猜你喜欢
      • 2011-06-24
      • 2012-07-23
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多