将多个三方库打包成一个动态库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将多个三方库打包成一个动态库相关的知识,希望对你有一定的参考价值。

参考技术A 项目里有A.B.C三个库的时候.
想用cocopods集成三方库.
就需要每个库都通过cocopods来集成.
个人强迫症.感觉很不爽.
最后看见大神的一个做法.

(1) 新建一个静态库.

(2) 让这个GXPodLinker静态库通过cocopods集成你想要的三方库.

(3) 将这个GXPodLinker静态库与三方库一起打成一个 all_in_one.a静态包.

(4) 创建一个动态库D作为all_in_one.a静态包的壳.

1.创建动态库GXPodContainer

2.在GXPodLinker目录下创建GXPodLinker静态库.如下图目录结构

3.在GXPodLinker目录下创建Podfile.并填写依赖的三方库.

4.运行pod install命令.

5.打开GXPodLinker.xcworkspace.

6.在build phases/Link Binary With Libraries里添加你依赖的三方库.如图.

7.创建Aggregate

7.1.点击下图加号

7.2.选择Aggregate

7.3.创建自定义脚本

7.4.填写要运行的脚本

7.5.脚本如下.需要放在GXPodLinker工程目录下才能被找到.

7.6.将target切换到GXPodLinkerShell.并运行.就可以生成all_in_one.a静态包了.
脚本会把all_in_one.a放在GXPodLinker工程目录下的lib文件夹

8.打开GXPodContainer工程.将all_in_one.a静态包拖入GXPodContainer工程.如下图

9.将all_in_one.a包link到工程

下图中还link了libz.tbd和libsqlite3.tbd是因为all_in_one.a静态包里的文件需要依赖.

10.将三方库的头文件赋值到include文件夹目录下

10.1.如下图创建脚本

10.2.填写如下脚本

下图中的GXPodLinker需要改成你创建的静态库壳的工程名

10.3.修改other linker flags

10.4.将GXPodContainer工程拖入你的主工程既可使用刚才你添加的三方库类了.

1.静态库安装cocopods时必须使用静态库导入.即Podfile文件里需要注释掉use_frameworks!

2.静态库通过cocopods导入三方库后.需要在Build Phases -> Link Binary With Libraries 里添加你所依赖的三方库.a >>> 很关键!!! 很关键!!! 很关键!!! 重要的事说三遍以上.

3.将all_in_one.a静态包拖入动态库A使用时.动态库必须设置other linker flags 为 -ObjC. (关于other linker flags见 other linker flags )

4.此时编译动态库A.工程可能会报错.根据错误link对应的系统库即可.(因为可能三方库需要依赖的系统库你没导入)

使用方法请见该库的 README.md

库地址: https://github.com/moonbeammm/GXPodContainer.git

以上是关于将多个三方库打包成一个动态库的主要内容,如果未能解决你的问题,请参考以下文章

动静态链接库

iOS之深入解析静态Pod与动态Pod

Mac 下打包的几个工具

linux下,有几个.so。如何将这几个动态库编译成一个动态库

pyinstaller打包动态库

app加载第三方动态库 dlopen failed