iOS Developer

iOS最新静态库的创建与使用

2017-07-27  本文已影响0人  Tank丶Farmer

引言

静态库即静态链接库,之所以叫做静态,是因为静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了.静态库的好处很明显,编译完成之后,库文件实际上就没有作用了.目标程序没有外部依赖,直接就可以运行.当然其缺点也很明显,就是会使用目标程序的体积增大.
我们可能熟识静态库但可能并未自己创建并使用,下面我将向大家讲解如何创建并使用静态库.

静态库的创建

首先我们准备好需要打包的文件,在这里我以 FMDB 第三方库为例,来给大家讲解静态库的打包.

1.创建新的项目

创建.png

之后选择


选择库.png

创建完成之后我们将第三方库导入如下图

导入 FMDB 第三方库.png

2.设置暴露的头文件

点击TARGETS ~> Build Phases 点击添加New Headers Phase

image.png

导入 FMDB.h 即可,我导入其他的有点多余,不过无伤大雅.咱们继续.

3.设置打包的类型

选择工具栏的 Product ~> Schemes,进入选择 Release 选项,如果想打测试包可以选择 Debug

选择打包类型.png

都设置成功之后,然后我们用真机运行一下就 OK 啦,运行完之后.a静态库就打包成功

image.png
我们点击 show in finder即可找到相应的库.
在此我们需要将 libStaticLibrary.a 改为- lStaticLibrary.a .(打包结束系统会自动为我们的加上 lib 字段)
注:打包静态库时如果用的真机,则静态包只能真机运行,如果模拟器运行则只能用于模拟器运行,如果想实现两通用就要先打两个包然后通过
lipo –create Release-iphoneos/libStaticLibrary.a Release-iphonesimulator/libStaticLibrary.a –output libsqlcipher.a即可实现整合

将下面文件夹复制到想要用的目录里即可

image.png

OK 我们的静态库就这样打包成功了!!!!!

静态库的使用

工具都准备好了,让我们应用到实际项目中吧.

1.配置文件路径

首先配置文件的路径,将静态库拖入项目中如下图所示

将静态库拖入项目.png

然后在相应位置导入.a库以及相应的FMDB.h 文件

2.设置Library Search Path

需要添加以下参数:

   $(SRCROOT)/Libs/Debug-iphonesimulator$(EFFECTIVE_PLATFORM_NAME) 
   $(SRCROOT)/Libs/Release-iphonesimulator$(EFFECTIVE_PLATFORM_NAME)

$(SRCROOT):表示当前工程的根路径,可以在右边看到实际对应的路径
$(EFFECTIVE_PLATFORM_NAME):代表当前配置是OS,如果是模拟器则为-iphonesimulator,真机则为-iphoneos
一般第三方库只提供Release版本,如果只有Release版,则两个都设置Release即可

image.png

3.设置编译参数

Build Settings ~> Linking ~> Other Linker Flags

-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载  
image.png

导入相应头文件即可直接调用

image.png

在运行时,遇到了.o报错

image.png

几经周折,终于找到了原因少了 sqlite3库,添加完之后直接运行.OK搞定,一切都是那么的完美

image.png

好久没有写东西了,最近不太忙,看了一些第三方的内部实现,看的不是怎么透彻,有时间跟大家分享一家,不足之处请多多批评指教,谢谢大家.
Tank

上一篇下一篇

猜你喜欢

热点阅读