【问题标题】:Combining several static archives into a new one将几个静态档案合并成一个新档案
【发布时间】:2010-04-18 13:50:23
【问题描述】:

我正在为移动设备制作游戏引擎。我想编译我的代码,将它与几个静态库链接,然后将我编译的代码与这些静态库结合起来形成一个新的静态库。但是,我的 Google Fu 正在抛弃我。

假设我有静态库 a.ab.ac.a 以及我的代码。我想将所有这些编译成awesome.a

我该怎么做?

顺便说一句,我正在使用 CodeSourcery 的arm-none-linux-gnueabi-ar

提前致谢。

【问题讨论】:

    标签: c++ linux makefile


    【解决方案1】:

    假设 a.ab.ac.a 在 CWD 中,类似于:

    mkdir a-objs && ( cd a-objs && ar -x ../a.a )
    mkdir b-objs && ( cd b-objs && ar -x ../b.a )
    mkdir c-objs && ( cd c-objs && ar -x ../c.a )
    rm -f awesome.a && ar -r awesome.a a-objs/* b-objs/* c-objs/* && ranlib awesome.a
    

    应该可以。

    【讨论】:

    • 啊,好吧,但是我可以将它与我的编译代码(我的 .o)结合起来吗?
    • 好吧,有点笨拙,但这有效:$(YG_ARCHIVER) -vq $(PROGS) $^ && $(YG_ARCHIVER) -vr $(PROGS) $(YG_LIBRARIES)。所以它编译我的静态库,然后将其他库添加到其中。
    【解决方案2】:

    如果您想将代码放入静态库中,请不要链接它。静态库根本没有链接。为了方便起见,它只是将目标文件的集合放入单个文件中。

    您创建目标文件,并将它们放入库中。如果您想将您的目标文件添加到 现有 库中而不是创建一个新库,那是相当简单的(尽管如果现有库足够知名,任何人都对其所做的事情或不包含,我想说添加人们不知道会期待的新东西可能是个坏主意)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      相关资源
      最近更新 更多