【原】 IOS 合并 lib (.a) 库 终极 终极 方法 方法 (解决 用于 解决 Duplikat 静态 库 冲突) - 编程 小 翁 - 博客 园

网上 流传 了 太多 关于 合并 lib 库 的 方法, 自己 也 尝试 过, 但 大多 失败. 有感于 这种 急于 解决 问题, 经过 百般 尝试 后 依旧 无 果 的 无奈 心情, 小 翁 在 这里 用 一个 实例 来 完整在 如何 在 Mac 中 合并 合并 静态 静态 静态 库.

三个 以 移动 广告 平台 多 多 盟 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个 三个.

目标 的: 合并 libDomobOfferWallSDK.a, libDomobAdWallCoreSDK + UI.a, libDomobAdSDK.a

Lass uns anfangen!

1. 依次 查看 所有 需要 合并 的 lib 库 所 支持 的 框架 类型 .i386 表示 支持 iphone 模拟器, ARMv6 应用 在 iphone 3GS 上, ARMv7 应用 在 iphone4, armv7s 应用 在 iphone4s 以及 iphone5, arm64 应用 在 最新 的 iphone5s 上.

lipo -info libDomobOfferWallSDK.a

是 是: Architekturen in die fette Datei: libDomobOfferWallSDK.a sind: armv7 armv7s i386

其他同理

Fat 红色 粗体 fat Fett 了 吗, Fett-Datei 表示 这个 库 里面 合并 了 1 个 框架.

2. 将 lib 库 拆分 出 armv7, armv7s, i386 类型 的 .a:

lipo -extract_family armv7 -ausgabe libDomobOfferWallSDK_arm.a libDomobOfferWallSDK.a

很多 人 会 以为 上面 这 条 命令 就 可以 一步 到位 分离 出 ARMv7 版本, 因为 你 显 式 地 指出 ARMv7 了. 但是, 你 错 了 .libDomobOfferWallSDK_arm.a 仍旧 是 Fett Datei, 也 就是 里面 含有 了 Arm 所有 版本, 这也是 网上 很多 版本 的 教程 错误 的 原因. 如果 误 以为 libDomobOfferWallSDK_arm.a 只 含 ARMv7 一个 版本, 则 下一步 的 解 .o 操作 就会 失败, 会 提示 "ist ein Fett-Datei". 小 翁 认为, 最 保险 的用 是 每次 lib 变化 时 都 用 lipo -info 查看 一下 一下 一下 一下 一下 一下 一下 一下 一下 一下 一下 一下 一下 一下 一下 一下

lipo -info libDomobOfferWallSDK_arm.aArchitect 出: Architekturen in der Fettdatei: libDomobOfferWallSDK_arm.a sind: armv7 armv7s

Arm 用 如下 命令 进一步 出 单独 单独 arm armv7, armv7s 版本:(非常重要的步骤)

lipo libDomobOfferWallSDK_arm.a -dein armv7 -output libDomobOfferWallSDK_armv7_final.a
lipo libDomobOfferWallSDK_arm.a -dein armv7s -output libDomobOfferWallSDK_armv7s_final.a

对于 对于 i386 则 不用 上述 那么 麻烦, 直接 用 第 一句 -extract_family 指令 就能 分离 出 只 含 i386 版本 的 库:

lipo -extract_family i386 -output libDomobOfferWallSDK_i386.a libDomobOfferWallSDK.a

经过 上面 操作 后, 我们 得到 了 第 一个 待 合并 库 libDomobOfferWallSDK.a 的 ARMv7, armv7s, i386 三个 版本 的 库. 剩下 的 两个 待 合并 库 同理.

3. 分离 出 目标 文件 (.o)

进行 实质上 的 合并 .xcode 里 提示 doppelte Symbol 都是 说 ***. O 与 ***. O 冲突. 注意, 只有 非 Fett Datei, 也 就是 只 含有 单 种 版本 的 lib 库 才能 分离 出 .o 文件

ar -x ../libDomobOfferWallSDK_armv7_final.aar -x ../libDomobAdWallCoreSDK+UI_armv7_final.aar -x ../libDomobAdSDK_armv7_final.a

这 一步 最好 是 在 lib * _final.a 的 同级 目录 下 新建 一个 文件 夹, 专门 用来 接收 解压 出来 的 .o 文件. 同 种 版本 (如 ARMv7) 的 都 解压 到 这个 文件 夹 中, 相同 的.o 文件 他 会 自己 覆盖 掉.

4. 从 .o 文件 中 合并 成 静态 库:

libtool -static -o ../libDomobUniversal-armv7.a * .o

armv7s, i386 版本 同理.

5.合并成最终的通用静态库:

Lipo -create -Ausgang libDomobUniversal.a libDomobUniversal-i386.a libDomobUniversal-armv7.a libDomobUniversal-armv7s.a