静态库、动态库实操过程记录

316 阅读2分钟

静态库STATICLIB .a文件的创建与合成。

  • 1.创建一个StaticLib的工程 image.png

  • 2.这两个是自动生成文件可删除 image.png

  • 3.编写自己的文件 image.png

  • 4.添加暴露.h文件 image.png image.png

  • 5.查看文件暴露文件成功 image.png image.png

  • 6.分别选择编译模拟器和真机各一次 image.png

    • 6.1删除路径可以让.a文件和.h文件放到同一目录下 image.png image.png
    • 6.2lipo -info libStaticLib.a 查看.a文件的架构 image.png
    • 6.3这个是仅仅编译模拟器当前的架构 image.png
    • 6.4关闭之后再编译一次然后查看架构 这里的三个就是可以完全适应所有模拟器的架构了 image.png
    • 6.5这个是切换到真机上编译后的所有的架构 image.png
  • 7.合成库 image.png

    • 7.1进入到Products image.png
    • 7.1 输入指令 lipo -create 模拟器上的.a 真机上的.a -output hecheng.a
    • 7.2报错了 image.png
    • 7.3解决 image.png
    • 7.4也可以通过指令来去除模拟器编译静态库中的arm64
      • lipo xxx.a or xxx.framework -remove arm64 -output xxx.a or xxx.framework image.png
  • 8结果完成 image.png

  • 通过上述的步骤已经完成了Debug下的静态库.a文件的创建,如果要做发布版本的只需要把编译器切换到release下后重新

  • 切换到release下真机和模拟器各编译一次然后重新合成就可以完成一个release下的合成静态库。

  • 这里一样要添加arm64 image.png image.png

image.png

  • 加入图片资源 image.png

image.png

  • 但是上述这样加入图片会有问题加入你要拖入的工程中有一张同名的图片名时运行项目,项目中仅有一张图片所以做好将图片放入bundle文件中
  • 将bundle文件加入到copyFiles中。 image.png

复合工程

  • 由于上述的构建只是一个staticLib无法进行正常的编译和修改正常运行所以希望能在一个正常的项目中编译来编辑库文件同时可以看看自己里面代码的正确性

image.png

image.png

  • static的复合工程 image.png
  • framework的复合工程

image.png

  • 选择target进行编译 image.png

FrameWork

  • 创建工程 image.png

image.png

image.png

  • 编译

image.png

  • 发现

image.png

image.png

image.png

  • 重新编译

image.png

  • 检测架构 image.png image.png image.png image.png image.png
  • 切换到真机下再来一次编译查看架构 注意版本 image.png
  • release 下再来一次真机和模拟器都要再来一次 image.png
  • 一共就有四个了

image.png

合成

  • cd进入这个文件夹 image.png

  • lipo -create 下面这个文件路径 image.png

  • 和这个文件路径 image.png

  • lipo create bebugxxx.framework/FrameWork debugxxx/framework/FrameWork -output hecheng image.png

  • 发现默认创建的framework是一个动态库 image.png

  • 在自己项目中拖入了自己写的动态库的时候把这个☑️上 image.png

image.png

  • 如果想让Framework是静态库就直接修改成Static Library 拖过去就可以直接使用。 image.png

移除架构

  • 移除某一个架构 image.png

  • 仅留下一个架构 image.png