如何将几个C/C++库合二为一?

Gha*_*nPL 37 c c++ archive

我厌倦了在我的项目中添加十个链接库,或者要求其中八个使用我自己的链接库.我想使用现有的库,如libpng.a,libz.a,libjpeg.a,并将它们组合成一个.a库.那可能吗?如何组合.lib库?

Jud*_*den 24

您可以使用从每个库中提取目标文件

ar x <library name>
Run Code Online (Sandbox Code Playgroud)

然后将它们全部合并到一个新的库中

ar cs <new library name> <list each extracted object file>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您的两个库包含具有相同名称的成员,那么unpack-libraries-into-directory-and-repack的简单方法将会失败 - 成员将会丢失.您需要重命名其中一个成员以避免冲突. (3认同)

Avn*_*ner 8

在类似Unix的系统上,ld和ar实用程序可以做到这一点.查看http://en.wikipedia.org/wiki/Ar_(Unix)或在任何Linux机器上或通过谷歌查找手册页,例如'unix man ar'.

请注意,链接到共享(动态)库可能会更好.这将为您的可执行文件添加依赖项,但会大大减小其大小,尤其是在您编写图形应用程序时.


Sta*_*ant 7

在 Linux 或 MinGW 或 Cygwin 上,使用 GNU 工具链:

ar -M <<EOM
    CREATE libab.a
    ADDLIB liba.a
    ADDLIB libb.a
    SAVE
    END
EOM
ranlib libab.a
Run Code Online (Sandbox Code Playgroud)

或者,如果你能保持的存在liba.alibb.a

ar crsT libab.a liba.a libb.a
Run Code Online (Sandbox Code Playgroud)

在 Windows 上,使用 MSVC 工具链:

lib.exe /OUT:libab.lib liba.lib libb.lib
Run Code Online (Sandbox Code Playgroud)