iOS:打包静态库以及 C、C++、OC 的混编

一、打包静态库

  1. 创建一个名为GenerateStaticLibrary(名称可以自主命名)的静态库工程
    iOS:打包静态库以及 C、C++、OC 的混编_第1张图片
  2. 删除自动生成的GenerateStaticLibrary.hGenerateStaticLibrary.m文件
    iOS:打包静态库以及 C、C++、OC 的混编_第2张图片
  3. 导入或新建静态库的代码(我这里新建了 C 文件和 C++ 文件)
    iOS:打包静态库以及 C、C++、OC 的混编_第3张图片
  4. 如果需要 C++ 混编,需要修改Compile Sources AsObjective-C++,否则在导入静态库的项目中混编 C++ 代码时,编译器报错
    iOS:打包静态库以及 C、C++、OC 的混编_第4张图片
  5. 修改Product->Scheme->Edit SchemeRelease
    iOS:打包静态库以及 C、C++、OC 的混编_第5张图片
  6. 选择真机调试模式,Command + B 进行编译
    iOS:打包静态库以及 C、C++、OC 的混编_第6张图片
  7. 再用模拟器调试模式,Command + B进行编译
    iOS:打包静态库以及 C、C++、OC 的混编_第7张图片
  8. 得到的 .a 文件在 Products 文件目录下,选中 .a 文件 右键 show in finder
    iOS:打包静态库以及 C、C++、OC 的混编_第8张图片
  9. Release-iphoneosRelease-iphonesimulator文件目录下的 .a 文件即是我们需要的对应真机和模拟器上使用的静态库文件
    iOS:打包静态库以及 C、C++、OC 的混编_第9张图片
  10. 将连个 .a 文件移动到一个自定义的目录下,并重命名为两个不一样的文件名
    iOS:打包静态库以及 C、C++、OC 的混编_第10张图片
  11. 因为两个静态库文件只能分别对应使用与真机和模拟器,所以在使用的过程中建议将两个文件合并为一个文件,以便通过一个静态库文件可以在支持在真机和模拟器上运行

合并命令如下:

lipo -create /文件路径/libGenerateStaticLibrary_simulator.a /文件路径/libGenerateStaticLibrary.a -output /文件路径/libGenerateStaticLibraryUniversal.a

二、在Xcode中导入静态库

  1. 将 .a 文件和头文件导入到项目中。需要注意的是在添加文件时,选项的选中
    iOS:打包静态库以及 C、C++、OC 的混编_第11张图片
  2. 如果涉及到 C++ 代码的混编,则需要把使用到 C++ 代码的 .m 文件的后缀改为 .mm
    iOS:打包静态库以及 C、C++、OC 的混编_第12张图片

三、编译静态库时自动导出.h头文件

在上述编译静态库时,并没有自动导出头文件。在使用的时候,需要手动筛选出所有的头文件,这显然是一件很麻烦的事。下面的内容是在编译静态库时,自动导出头文件的操作步骤。

1.在Build Phases中,点击"+"按钮,用以添加"New Copy File Phase"
iOS:打包静态库以及 C、C++、OC 的混编_第13张图片
2.在"Copy Files"中修改红框标注的Subpath的值,例如修改为“include/$(PRODUCT_NAME)/C”,最后导出的文件夹名称就是“C”
iOS:打包静态库以及 C、C++、OC 的混编_第14张图片
3.点击"+",为"Copy Files"添加头文件
iOS:打包静态库以及 C、C++、OC 的混编_第15张图片
4.重复1,2,3步骤,添加需要的文件夹目录
iOS:打包静态库以及 C、C++、OC 的混编_第16张图片
5.按下Command + B进行编译之后,就可以自动导出头文件到include文件夹
iOS:打包静态库以及 C、C++、OC 的混编_第17张图片

你可能感兴趣的:(iOS)