
How to combine several C/C++ libraries into one?我厌倦了将十个链接库添加到我的项目中,或要求其中八个使用我自己的链接库。 我想使用现有的库,例如libpng.a,libz.a,libjpeg.a,并将它们组合成一个单独的.a库。 那可能吗? 如何合并.lib库? 您可以使用以下命令从每个库中提取目标文件
然后将它们全部合并到一个新的库中
在类似Unix的系统上,ld和ar实用程序可以做到这一点。请访问http://en.wikipedia.org/wiki/Ar_(Unix)或在任何Linux机器上或通过google查找手册页,例如" unix man ar"。 请注意,链接到共享(动态)库可能会更好。这将为您的可执行文件增加依赖性,但将大大减小其大小,尤其是在编写图形应用程序时。 在Linux或MinGW或Cygwin上,使用GNU工具链:
或者,如果可以保留
在Windows上,使用MSVC工具链:
也许是我误会了,但是如果最终用户代码直接调用它们,您是否不必只运送这些库呢?如果对Jpeg方法等的所有访问均来自静态库中的代码,则只需将这些库链接到您的库中即可。 即
也就是说,如果最终代码需要直接调用libz.a,libpng.a等,这只是一个问题。 例如,如果应用程序代码有合法需要调用libz.a,则如上所述,这是使用动态模块的情况。 PS:我会获得艺术家徽章吗? :) 我不确定如何将它们物理地组合成一个文件,但是您可以采用某种抽象,只包含一个" AllMyLibs.a / h",而该文件又包含了您想要的所有内容。您也可以将其放置在编译器搜索库的位置,因此它适用于任何项目。 附言-出于好奇,为什么不喜欢包含单个库? 将多个第三方库合并到一个库中可能会给您带来更多问题-例如,如果其中两个库定义了程序不使用的公共符号。现在,在合并库之前,您必须提取公共符号的所有(或仅一个)实例。 |