我厌倦了加入十库的链接进入我的项目,或要求的八个他们用我自己的。我想把现有库像libpng.一、libz.一、libjpeg.一,并且将它们合并成一个单一的。图书馆。这可能吗?关于如何组合。lib库?

有帮助吗?

解决方案

在类Unix系统中,ld和ar公用事业可以做到这一点。检查了 http://en.wikipedia.org/wiki/Ar_(Unix) 或者查找的人网页上的任何linux系统中或通过谷歌,e。g'unix man ar'.

请注意,你可以更好地关联到一个共用(动态)图书馆。这将添加依赖可执行,但将大幅减少其大小,尤其是如果你写一个图形程序。

其他提示

你可以提取的目文件从各个图书馆

ar x <library name>

然后将它们合并成一个新的图书馆

ar cs <new library name> <list each extracted object file>

在Linux或MinGW或Cygwin,GNU工具:

ar -M <<EOM
    CREATE libab.a
    ADDLIB liba.a
    ADDLIB libb.a
    SAVE
    END
EOM
ranlib libab.a

或者如果你可以保持的存在 liba.alibb.a:

ar crsT libab.a liba.a libb.a

在窗户,MSVC工具:

lib.exe /OUT:libab.lib liba.lib libb.lib

也许我误解,但是你不仅仅有船舶库,如果最终用户代码呼吁他们直接?如果所有的访问Jpeg方法等是从你的代码,在你的静态图书馆,然后只是链接libs到你lib。

I.e。

----------------
| End-user exe |
----------------
      |
      | makes calls to
      |
      v
 --------------------
 | Your static lib.a | 
 --------------------
         | makes calls to and links
         v
     ------------------------------------ .....
     |                    |         |
  -------------    -------- ---------- 
  | libjpeg.a |    |libz.a| |libpng.a|
  -------------    -------- ----------

即这只是一个问题,如果结束码需要作出直接呼吁成libz.一,libpng.一等。

如果应用程序的代码中有一个合法需要调libz.例如,然后,将作为上面提到的一种情况下使用动态模块。

PS:我得到一个艺术家徽章吗?:)

我不知道该如何身体上将它们结合成一个单一文件,但是你可以雇用一种抽象的一种仅包括一个单一的"AllMyLibs.a/h",其中又包括一切你想要的。你也可以把这个进入位置的编译器搜索图书馆,使它的工作的任何项目。

P.S. 出于好奇,你为什么不喜欢,包括单libs?

合并几个第三方图书馆变成一个可以创造更多的问题--例如,如果两个图书馆定一个共同的符号,你的节目不会使用。现在你已经有够提取所有(或所有的-但是-一个)的实例常见的象征之前你结合起来的图书馆。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top