编程技术记录

世界你好!

本文指的转换为无源码时的转换(有源码那叫编译构建)
涉及工具

  • libtool 用于静态库转为动态库
  • lipo 用于查看库信息,将fat库拆分为thin库,将thin库合并为fat库
  • ar 用于将thin库解压为object文件

基本过程,将fat静态库拆分为thin静态库,再将thin静态库解压为object文件,然后将object文件压缩为thin动态库,最后将thin动态库合并为fat动态库

拆分fat静态库

先查看fat库基本信息,重点是看由哪些指令架构的thin库组成

lipo -info  libfat.a
# 输出信息中重点看指令架构
Architectures in the fat file: libfat.a are: x86_64 arm64

按照指令架构拆分fat库

lipo libfat.a -extract x86_64 -output libfoo.a

解压thin静态库

会输出一组.o文件

ar -x libfoo.a

压缩为thin动态库

注意下,需要手动添加依赖库, -framework 依赖库 -l依赖库

libtool -dynamic *.o -o libfoo_dynamic-x86_64.dylib -framework CoreFoundation -lSystem

将thin动态库合并为fat动态库

lipo -create libfoo_dynamic-x86_64.dylib  libfoo_dynamic-arm64.dylib -output ./libfoo_dynamic.dylib

参考
https://pewpewthespells.com/blog/convert_static_to_dynamic.html

发表回复

© Beli. All Rights Reserved.