iOS 动态库转静态库的配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 动态库转静态库的配置相关的知识,希望对你有一定的参考价值。

参考技术A Link With Standard Libraries -> NO 

Mach-O Type -> Static Library

Dead Code Stripping -> NO

Enable Bitcode -> YES

STRIP_STYLE -> Debugging Symbols

Other C Flags 添加 -fembed-bitcode

DEPLOYMENT_POSTPROCESSING = NO (默认NO多余)

1、 framework可以生成真机和虚拟机2个不同的framewrok,不能互通使用,所以必须要将2个framework合并才可以。

2、在终端中输入一下命令

需要注意的是这个打包path指的是xxx.framework/xxx文件,而不是xxx.framework。导出的path是路径 + / + 文件名,比如我要放到桌面上,则路径应该是 /users/hzh/desktop/xxx

生成的xxx文件替换到真机path路径下xxx.framework,覆盖原来的xxx文件。

3、(敲黑板,划重点)如果你是swift,那么你还需要第四步才算完成,oc完成前面3步即可。将模拟器路径下xxx.framework/Modules/xxx.swiftmodule文件夹下的所有文件复制到真机path路径下xxx.framework/Modules/xxx.swiftmodule文件夹内。至此framework真机模拟机完成。

新建一个 Aggregate,并添加脚本

把下面的脚本复制到 Run Script 里面

选中我们刚才创建的 Aggregate 这个 target,然后 Build,就可以坐等结果了。注意这里必须连手机。

Linux下的静态库和动态库

静态库

可以把它想象成是一些代码的集合,在可执行程序运行前就已经加到了代码中,成为了执行程序的一部分,一般是以.a为后缀的文件名,Windows下后缀为.lib。静态库的命名也分为三部分,1、前缀:lib,2、库的名称:随意,如lisi,3、后缀:.a。

静态库优缺点

上面简单介绍了静态库,那它自然也会有优缺点,这里来介绍下它的优缺点。

优点:1、在最后,函数库是被打包到应用程序中的,实现函数本地化、寻址方便、高效。2、程序在运行的时候,与函数库没有关系,移植性更强。

缺点:1、消耗资源较大,每个进程在使用静态库的时候,都要复制一份才可以,这也就造成了内存的消耗。2、在程序更新、部署、发布的时候,使用静态库相对麻烦,如果一个静态库更新了,那它的应用程序都需要重新编译,再发送给用户,有的时候可能只是一个小的改动,但对于用户来说,会导致整个程序重新下载。

动态库

在程序编译时不会被连接到目标代码中,在后期运行时才会载入,不同的应用程序如果调用相同的库,内存中只有一份共享库的拷贝,也就避免了空间的浪费问题。一般以.so作为文件后缀名,也分为三部分:1、前缀:lib,2、库名称:自定义,3、后缀:.so

动态库优缺点

优点:1、节省内存2、部署、升级相对方便,只需要更换动态库,再重新启动服务即可。

缺点:1、加载速度比静态库慢2、移植性较差,需要把所有用到的动态库进行移植。

参考技术A linux下的静态库和动态库1.制作自己的动态库和静态库linux下动态库以.so结尾,静态库以.a结尾,它们都以lib开头,比如一个库名为net,那么它的全名应该是libnet.so或者libnet.a。我们有两个文件,hello.c和test.c,下面是两个文件的内容//hello.c
www.zhishiwu.com
#include
<stdio.h>void
my_lib_func()printf(Library
routine
called/r/n);//test.c#include
<stdio.h>
www.zhishiwu.com
int
main()my_lib_func();return
1;test.c调用了hello.c的方法,我们把hello.c封装成库文件。无论是静态库还是动态库,都是由.o文件组成,我们先把gcc
-c
hello.c生成.o文件制作静态库ar
crv
libmyhello.a
hello.o,ar是生成静态库的命令,libmyhello.a是我的静态库名。下一步就是在我的程序中使用静态库
可以看到已经有了Library
routine
called的结果,说明调用成功了。下面我们删除libmyhello.a,看看程序是否还是运行正常
我们发现程序依然运行正常,说明静态库已经连接进入我们的程序中制作动态库
www.zhishiwu.com
我们看见动态库libmyhello.so已经生成,下面继续使用
找不到库文件,这个时候我们把so文件拷贝到/usr/lib下面
运行成功2.动态库和静态库同时存在的调用规则我们可以发现,不论是动态库还是静态库,程序编译连接的时候都是加的参数-l,那么当他们同时存在的时候,程序会选择动态库还是静态库呢。我们做个尝试。
我们同时存在libmyhello.a和libmyhello.so,我们发现运行的时候,出现找不到动态库的错误,由此,我们可以得出结论,同时存在动态库和静态库的时候,gcc会优先选择动态库作者
梨树阳光

以上是关于iOS 动态库转静态库的配置的主要内容,如果未能解决你的问题,请参考以下文章

Linux下的静态库和动态库

在linux环境下静态库(.a)的编译和使用

iOS 动态库+静态库

iOS静态库引用

静态库与动态库注入

动态库和静态库的区别