IOS打包静态库以及C、C++、OC的混编
2019-05-10 本文已影响0人
黄梦轩
一、打包静态库
1.创建一个名为GenerateStaticLibrary(名称可以自主命名)的静态库工程
![](https://img.haomeiwen.com/i1313120/a9466a08d57a38fa.png)
2.删除自动生成的GenerateStaticLibrary.h和GenerateStaticLibrary.m文件
![](https://img.haomeiwen.com/i1313120/76a1a1ab26a7a415.png)
3.导入或新建静态库的代码(我这里新建了C文件和C++文件)
![](https://img.haomeiwen.com/i1313120/7de8c0806c45105a.png)
4.如果需要C++混编,需要修改Compile Sources As为Objective-C++,否则在导入静态库的项目中混编C++代码时,编译器报错
![](https://img.haomeiwen.com/i1313120/78f476d61501f261.png)
5.修改 Product->Scheme-> Edit Scheme 为 Release
![](https://img.haomeiwen.com/i1313120/9360b97f63c56cf0.png)
6.选择真机调试模式,Command + B进行编译
![](https://img.haomeiwen.com/i1313120/4c7a66ef3a07d2d4.png)
7.再用模拟器调试模式,Command + B进行编译
![](https://img.haomeiwen.com/i1313120/f3bb6d14483cfbd3.png)
8.得到的.a文件在Products文件目录下,选中.a文件 右键 show in finder
![](https://img.haomeiwen.com/i1313120/789e3abec6b8903a.png)
9.Release-iphoneos和Release-iphonesimulator文件目录下的.a文件即是我们需要的对应真机和模拟器上使用的静态库文件
![](https://img.haomeiwen.com/i1313120/03627198011df486.png)
10.将连个.a文件移动到一个自定义的目录下,并重命名为两个不一样的文件名
![](https://img.haomeiwen.com/i1313120/12ace6328e4343bc.png)
11.因为两个静态库文件只能分别对应使用与真机和模拟器,所以在使用的过程中建议将两个文件合并为一个文件,以便通过一个静态库文件可以在支持在真机和模拟器上运行
合并命令如下:
lipo -create /文件路径/libGenerateStaticLibrary_simulator.a /文件路径/libGenerateStaticLibrary.a -output /文件路径/libGenerateStaticLibraryUniversal.a
二、在Xcode中导入静态库
1.将.a文件和头文件导入到项目中。需要注意的是在添加文件时,选项的选中
![](https://img.haomeiwen.com/i1313120/f350ffbd5860d8aa.png)
3.如果涉及到C++代码的混编,则需要把使用到C++代码的.m文件的后缀改为.mm
![](https://img.haomeiwen.com/i1313120/8dd8bf11f7190645.png)
三、编译静态库时自动导出.h头文件
在上述编译静态库时,并没有自动导出头文件。在使用的时候,需要手动筛选出所有的头文件,这显然是一件很麻烦的事。下面的内容是在编译静态库时,自动导出头文件的操作步骤。
1.在Build Phases中,点击"+"按钮,用以添加“New Copy File Phase”
![](https://img.haomeiwen.com/i1313120/27728888f2bc1315.png)
2.在“Copy Files”中修改红框标注的Subpath的值,例如修改为“include/$(PRODUCT_NAME)/C”,最后导出的文件夹名称就是“C”
![](https://img.haomeiwen.com/i1313120/4d999ee011b4875a.png)
3.点击“+”,为“Copy Files”添加头文件
![](https://img.haomeiwen.com/i1313120/b87075ec8fc588ff.png)
4.重复1,2,3步骤,添加需要的文件夹目录
![](https://img.haomeiwen.com/i1313120/45bb64b6f94009d0.png)
5.按下Command + B进行编译之后,就可以自动导出头文件到include文件夹
![](https://img.haomeiwen.com/i1313120/5f0a6d54ab4e801c.png)