.a静态库打包

Introduction about Linkedme packaging .a file

打包

打包流程

1.静态库工程的创建
  • Xcode New一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static Library。直接next去建立一个LinkedME_SDK这样的工程。

2.自动生成.h和.m文件
  • 接下来你会看到自动生成.h和.m文件 可以在.m文件中写你要的代码(此静态库现在没有引用这两个文件生成.a前将之删除或者此时将之删除)

3.添加LinkedME_SDK到工程里边

这里注意Copy items if needed需要勾选

4.添加SDK暴露的头文件
  • 点击TARGEtS -> Build Phases ->Copy Files -> 点’+’添加需要的头文件

    注意这里的Copy only when installing不勾选(勾选上之后你想要暴露出来的头文件所属的文件夹就会隐藏)

5.添加引用框架
  • 点击TARGEtS -> Build Phases ->Link Binary With Libraries(0 items) -> 点’+’添加SDK中引用到得框架
  • 现在用到的框架
Foundation.framework
UIKit.framework
CoreGraphics.framework
AdSupport.framework
SafariServices.framework
CoreSpotlight.framework

6.生成.a文件
  • 快捷键(command+B)选中真机编译和选中模拟机编译对应生成的连个.a文件一个是真机的一个是模拟机的

  • 这是可以查看.a文件信息通过下边命令
 lipo -info libLinkedME_SDK_1.0.a
7.合并.a文件
  • 这时候有两个.a文件 如果你是选择模拟器编译生成的.a文件那么在真机运行的时候是会报错的 反之亦然 所以为了可以使用真机和模拟器都可以使用.a文件可以合并成为一个.a文件 使用终端合成具体方法如下:
lipo -create /Users/LinkedME09/Library/Developer/Xcode/DerivedData/LinkedME_SDK_1.0-dnlxbjyrawzmxpfoiojqhgfieuyc/Build/Products/Debug-iphoneos/libLinkedME_SDK_1.0.a  /Users/LinkedME09/Library/Developer/Xcode/DerivedData/LinkedME_SDK_1.0-dnlxbjyrawzmxpfoiojqhgfieuyc/Build/Products/Debug-iphonesimulator/libLinkedME_SDK_1.0.a  -output /Users/LinkedME09/Desktop/LinkedME_SDK_1.0.a
8.引用.a静态库文件到工程
  • 此时就可以看到桌面上的.a文件 直接拖入工程就是可调用

    这个.a文件就是模拟器.a和真机.a合并后的.a静态库

打包注意事项

1.打包的时候在Build Phases中 Copy Files目录中如果选中Copy only when installing就是生成include文件夹(包含暴露出来的文件夹)
2.注意打包的时候添加对应的框架
Foundation.framework
UIKit.framework
CoreGraphics.framework
AdSupport.framework
SafariServices.framework
CoreSpotlight.framework
3.打包模拟器(和真机).a文件的时候注意用arm处理器最高的版本模拟器打包
  • 这里说的高版本不是系统的版本 而是手机的型号。因为根据手机的不同arm指令集也不相同。详情参考指令集的区别
4.添加LinkedME_key(两种方式)
  • 在plist文件里边添加LinkedME_key(如下图)

    *或者点击info.plist -> Open As ->Source Code里边添加如下代码

<key>linkedme_key</key>
<dict>
<key>live</key>
<string>46ed6c4bbdbb5c59ed0dd835f7c8868a</string>
<key>test</key>
<string>46ed6c4bbdbb5c59ed0dd835f7c8868a</string>
</dict>
5.查看.a信息命令
  • 查看.a命令

    lipo -info libLinkedME_SDK_1.0.a

*模拟器的.a的输出信息

input file libLinkedME_SDK_1.0.a is not a fat file
Non-fat file: libLinkedME_SDK_1.0.a is architecture: i386

*真机.a信息

input file libLinkedME_SDK_1.0.a is not a fat file
Non-fat file: libLinkedME_SDK_1.0.a is architecture: arm64

注意i386和arm64的区别 [arm指令集区别](http://www.cocoachina.com/ios/20140915/9620.html

  • 合并.a 命令
lipo -create /Users/LinkedME09/Library/Developer/Xcode/DerivedData/LinkedME_SDK_1.0-dnlxbjyrawzmxpfoiojqhgfieuyc/Build/Products/Debug-iphoneos/libLinkedME_SDK_1.0.a  /Users/LinkedME09/Library/Developer/Xcode/DerivedData/LinkedME_SDK_1.0-dnlxbjyrawzmxpfoiojqhgfieuyc/Build/Products/Debug-iphonesimulator/libLinkedME_SDK_1.0.a  -output /Users/LinkedME09/Desktop/LinkedME_SDK_1.0.a
时间: 2024-11-14 12:37:43

.a静态库打包的相关文章

静态库打包

静态库(把目标文件:二进制文件,.o,.a)打包:使用静态库有两个条件: 把库文件包含进来 包含头文件 注意:库文件中不能有main函数 Linux中,静态链接库以.a结尾,动态链接库以.so结尾. windows中,静态链接库以.lib结尾,动态链接库以.dll结尾. 静态库打包主要是把多个.o文件生成链接文件,有以下优点 代码保护(看不到原来代码) 维护成本低 可在静态库设置保护期(eg:获取当前时间和2019年比较,若大于则退出) Makefile的书写:   1 .PHONY:libmy

【项目】静态库打包的一些注意事项

今天打包的时候,出现了一些问题: localhost:~ LV$ lipo -info /Users/LV/Library/Developer/Xcode/DerivedData/FaceAPI-eryqzwkpzlhqgsczyrzogeimufsd/Build/Products/Debug-iphoneos/libFaceAPI.a input file /Users/LV/Library/Developer/Xcode/DerivedData/FaceAPI-eryqzwkpzlhqgsc

标准IO的简单应用,动静态库,读取系统时间并打印,模拟ls -l功能

2015.2.27星期五,小雨 标准IO实现的复制功能: #include <stdio.h>#include <errno.h> #define N 64 int main(int argc, char *argv[]){ int n; char buf[N]; FILE *fps, *fpd; if(argc < 3) { printf("usage : %s <src_file><dst_file>\n",argv[0]);

iOS 静态类库 打包 C,C++文件及和OC混编

iOS 静态类库 编译 C,C++ 我们都知道,OC 原生支持C, 在 创建的 OC类的 .m 里面,可以直接编写C的代码: 同样 Xcode 也支持 OC ,C++的混编,此时,我们通常把OC创建的 .m 文件,手动修改为 .mm 文件以支持 oc c++的混编 基于上面的特性,我们在打包静态类时,可以编译C,OC,C++ 以及三者混合的代码: 因为大多数夸平台的算法库代码都是C或是C++写的,我们利用Xcode编译成静态类库,可以非常安全的提供给别人使用 如下示例: 一:静态库打包 C 代码

【转】iOS静态库 【.a 和framework】【超详细】

原文网址:https://my.oschina.net/kaqijiang/blog/649632 一.什么是库? 库是共享程序代码的方式. 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种.iOS中的静态库有 .a 和 .framework两种形式:动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式. 二.静态库与动态库的区别? 静态库: 链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝.

静态库和动态库详解

1.什么是库,为什么使用库? 库是共享程序代码的方式,一般分为静态库和动态库:库实现了iOS程序的模块化,将某些特定的功能模块化为库的格式方便分享和使用! 2.静态库和动态库有什么特点? 异同点: 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存. 共同点: 静态库和动态库都是闭源库,只能拿来满足某个功能的使用,不会暴露内部具体的代码信息,而从github上下载的第三

(一〇二)静态库(.a)的打包

库是代码的集合,根据代码公开程度,分为开源库和闭源库. 其中闭源库主要包括静态库和动态库,是经过编译的二进制文件,看不到具体实现. 静态库的拓展名是.a或者.framework,动态库则是.dylib和.framework. 静态库在链接时会将库完整的复制到可执行文件中,被多次使用就有冗余拷贝. 动态库在链接时不复制,程序运行时系统会动态的加载,多个程序共享一个动态库,节省内存. 注意:项目中如果包含自制的动态库,上传到App Store会被拒绝,如果要上传App,应选择静态库. 静态库用于抽取

静态库的打包参考步骤

闲言少叙,立马入正题... 1.创建静态库工程 注意:应选择Framework & Library中的Cocoa Touch Static Library.创建一个空项目. 2.创建需要打包的库文件 3.在.h文件中可以声明需要提供给外界调用的方法 4.在.m文件中实现对应的功能. 5.注意需要在工程中设置Copy Files 中添加.h文件,否则最后生成的库文件中没有.h文件.具体步骤为项目名称StaticDemo->Targets->StaticDemo->BuildPhas

打包静态库.a文件的方法(ar,ranlib,nm命令介绍)

一 常用脚本 1 打包脚本 脚本如下,下面附上ar 和 ranlib命令参考(命令来自于网络) ALLLIB=*.aFILE=`ls *.a`#原来的库解压重命名 for F in $FILEdo        ar x $F        OBJ=`ar t $F`        for O in $OBJ        do                mv $O ${F}_${O}        donedone #ar c 创建一个库,ar r 插入文件.ar s ==ranlib 向