.a包含多个.a ios_ios .a库引入.a文件 - CSDN
  • iOS库 .a与.framework区别

    万次阅读 2017-10-31 18:03:45
    一、什么是库?...动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。 三、iOS里静态库形式? .a和.framework 四、iOS里动态库形式?

    一、什么是库?

    库是共享程序代码的方式,一般分为静态库和动态库。

    二、静态库与动态库的区别?

    静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。

    动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

    三、iOS里静态库形式?

    .a和.framework

    四、iOS里动态库形式?

    .dylib和.framework

    五、framework为什么既是静态库又是动态库?

    系统的.framework是动态库,我们自己建立的.framework是静态库。

    六、a与.framework有什么区别?

    .a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

    .a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

    .a + .h + sourceFile = .framework。

    建议用.framework.

    七、为什么要使用静态库?

    方便共享代码,便于合理使用。

    实现iOS程序的模块化。可以把固定的业务模块化成静态库。

    和别人分享你的代码库,但不想让别人看到你代码的实现。

    开发第三方sdk的需要。

    八、制作静态库时的几点注意:

    1 注意理解:无论是.a静态库还.framework静态库,我们需要的都是二进制文件+.h+其它资源文件的形式,不同的是,.a本身就是二进制文件,需要我们自己配上.h和其它文件才能使用,而.framework本身已经包含了.h和其它文件,可以直接使用。

    2 图片资源的处理:两种静态库,一般都是把图片文件单独的放在一个.bundle文件中,一般.bundle的名字和.a或.framework的名字相同。.bundle文件很好弄,新建一个文件夹,把它改名为.bundle就可以了,右键,显示包内容可以向其中添加图片资源。

    3 category是我们实际开发项目中经常用到的,把category打成静态库是没有问题的,但是在用这个静态库的工程中,调用category中的方法时会有找不到该方法的运行时错误(selector not recognized),解决办法是:在使用静态库的工程中配置other linker flags的值为-ObjC。

    4 如果一个静态库很复杂,需要暴露的.h比较多的话,就可以在静态库的内部创建一个.h文件(一般这个.h文件的名字和静态库的名字相同),然后把所有需要暴露出来的.h文件都集中放在这个.h文件中,而那些原本需要暴露的.h都不需要再暴露了,只需要把.h暴露出来就可以了。

    展开全文
  • 之前合成了静态库.a, 有时候我们会拿到别人提供的静态库,但是编译报错,这时候最先要考虑的一步就是这静态库是否支持我们编译的架构。怎么查看支持的架构?废话不说!下面亲自实验一下 第一步: 准备一...

    之前合成了静态库.a, 有时候我们会拿到别人提供的静态库,但是编译报错,这时候最先要考虑的一步就是这个静态库是否支持我们编译的架构。怎么查看支持的架构?废话不多说!下面亲自实验一下

    第一步:

    准备一个静态库.a文件,比如我们之前制作的 libVideoPlayerLib.a,放在桌面的test目录里。
    在这里插入图片描述

    第二步:

    1. 打开终端:cd 到 libVideoPlayerLib.a 所在的文件夹test下 .
    2. 查看 libVideoPlayerLib.a 包含几种架构 arch 。 (file 命令)
    3. 分离出一种架构的.a。(lipo **.a -thin armv7 -output armv7.a)
    4. 抽离.a文件的object文件.o。(ar -x armv7.a)
    5. 将.o 转换为 .m。(nm ****.o > ****.m)
    Last login: Sun May  5 19:30:20 on ttys004
    lzz-Mac-mini:~ suning$ cd /Users/suning/Desktop/test 
    lzz-Mac-mini:test suning$ file /Users/suning/Desktop/test/libVideoPlayerLib.a 
    /Users/suning/Desktop/test/libVideoPlayerLib.a: Mach-O universal binary with 4 architectures: [arm_v7:current ar archive random library] [arm64:current ar archive random library]
    /Users/suning/Desktop/test/libVideoPlayerLib.a (for architecture armv7):	current ar archive random library
    /Users/suning/Desktop/test/libVideoPlayerLib.a (for architecture i386):	current ar archive random library
    /Users/suning/Desktop/test/libVideoPlayerLib.a (for architecture x86_64):	current ar archive random library
    /Users/suning/Desktop/test/libVideoPlayerLib.a (for architecture arm64):	current ar archive random library
    lzz-Mac-mini:test suning$ lipo libVideoPlayerLib.a -thin armv7 -output armv7.a
    lzz-Mac-mini:test suning$ ar -x armv7.a
    lzz-Mac-mini:test suning$ nm VideoPlayerLib.o > VideoPlayerLib.m
    

    在这里插入图片描述6. 打开导出到.m 伪代码
    在这里插入图片描述通过伪代码可以了解.m 的实现过程

    展开全文
  • iOS解压静态库.a文件

    千次阅读 2017-11-22 09:25:15
    先先准备一静态库.a文件,比如叫libWeiboSDK.a,放在桌面的test目录里。 1、首先进入到libWeiboSDK.a文件夹 file一下libWeiboSDK.a,看一下该文件包含几种arch。  执行: cd /Users/dotnar/Desktop/Test  file ...

    先先准备一个静态库.a文件,比如叫libWeiboSDK.a,放在桌面的test目录里。

    1、首先进入到libWeiboSDK.a文件夹 file一下libWeiboSDK.a,看一下该文件包含几种arch。

        执行: cd /Users/dotnar/Desktop/Test

                    file    libWeiboSDK.a

        打印:

    libWeiboSDK.a: Mach-O universal binary with 4 architectures: [arm_v7:current ar archive] [x86_64]

    libWeiboSDK.a (for architecture armv7):current ar archive

    libWeiboSDK.a (for architecture arm64):current ar archive

    libWeiboSDK.a (for architecture i386):current ar archive

    libWeiboSDK.a (for architecture x86_64):current ar archive

    可以看到该文件包含四种arch,分别是armv7、arm64、i386、x86_64

    2、抽离其中一个arch ,由于下面抽离object的时候必须是要单一的库,所以这里我们之抽出armv7并命名为armv7.a:

    执行:lipo libWeiboSDK.a -thin armv7 -output armv7.a

    这时候应该在test目录下多了一个v7.a文件。

    3、抽离.a文件的object

    执行:ar -x armv7.a

    你会发现在test目录下多了很多.o文件

    4、转换.o文件 (如下的NSData+WBSDKBase64.o文件)

    执行:nm NSData+WBSDKBase64.o> NSData+WBSDKBase64.m

    此时你会发现生成了一个NSData+WBSDKBase64.m

    到此就解压完成,不过此时的.m文件只能看到一些函数而不是源码。如下:


    展开全文
  • 公司的一项目,需要做成一.a静态库供别人调用,但是静态库中引用到了图片和xib 1.打开Xcode,点击File\New\Project,选择iOS\Framework and Library\Cocoa Touch Static Library新建一静态库工程. 2.导入...

    公司的一个项目,需要做成一个.a静态库供别人调用,但是静态库中引用到了图片和xib
    1.打开Xcode,点击File\New\Project,选择iOS\Framework and Library\Cocoa Touch Static Library新建一个静态库工程.
    在这里插入图片描述

    2.导入你的项目(包括项目里面所有的功能类和资源文件)
    1》对于图片,建议不要把存放图片的Assets.xcassets文件直接挪过来,这样后期把资源文件打包后,不方便读取读取到图片;
    2》我在这里把xib,故事板,和图片都放在了一个文件夹下面,是为了大家看的方便,开发者也可以不这么做
    3、把你项目里面需要被开发者引用的类暴露出来(例如:我需要从外面引用到MyProjectController这个控制器,就把.h文件从 project路径下面移动到public路径下)

    在iOS中,资源库是用bundle来实现的,网上的很多做法都是建立一个target,然后在target选择bundle,把图片放到bundle中,这种方法的缺点是:bundle只允许在mac中建立,而iOS是不支持的,所以要先选择mac平台建立target,然后建立bundle,再将图片拷进去,再修改配置属性来支持iOS平台,操作太繁琐了。
    
    其实bundle本质上就是一个目录,里面可以存放各种资源,比如图片,xib等等。因此,简单的做法是:建立一个目录,把你的图片放进去,将目录重命名为xxx.bundle,然后就库在代码中读取图片资源了,比如要读取usc.bundle 中的alert.png图片:
    

    NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@“usc” ofType:@“bundle”]];

    NSString *alertImagePath = [bundle pathForResource:@"alert" ofType:@"png"];
    
    UIImage *img = [UIImage p_w_picpathWithContentsOfFile:alertImagePath];
    
    这样就可以将.bundle 和 .a 文件一起发布出去了。
    把.bundle 和 .a 文件 一起放到工程里面,这样就可以了
    
    展开全文
  • ios学习--解压静态库.a文件

    千次阅读 2016-06-02 19:47:28
    首先先准备一静态库.a文件,比如叫staticLibrary.a,放在桌面的test目录里。 分离arch 首先先file一下staticLibrary.a,看一下该文件包含几种arch。 ~ cd Desktop/test test ls staticLibrary.a test file ...
  • ios 遇到引用.a库遇到的问题

    千次阅读 2012-09-10 16:14:53
    最近ios开发项目,遇到了,在device运行和模拟器运行都需要引用.a库,两库的名字相同,分别放在了连文件夹下面。但是运行起来的时候总是报错。说明是引用库的问题。 因为是在真机运行可以通过,但是模拟器编译...
  • iOS 最新framework和.a使用全解

    千次阅读 2016-12-09 14:47:05
    .a是一纯二进制文件,.framework中除了有二进制文件之外还有资源文件。 .a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。 .a + .h + sourceFile = .framework。 .a只是静态库。framework既...
  • IOS 工程依赖(.a)静态库和Bundle

    千次阅读 2017-07-31 17:05:45
    IOS 工程依赖(.a)静态库和Bundle
  • ios开发-- 静态库库.a与.framework区别

    千次阅读 2015-10-28 16:11:25
    动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。 三、iOS里静态库形式? .a和.framework 四、iOS里动态库形式? .dylib和.framewor
  • 1.库 .a与.framework区别 2. 创建framework静态库...动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。三、iOS里静态库形式?.a和.framework四、iOS里动
  • 如果在项目中加入多个第三方库后出现类似下面的问题(XXX.o重复定义): duplicate symbol _OBJC_CLASS_$_EAGLView in: /Users/XXXname/Library/Developer/Xcode/DerivedData/XXObjext-gcnzoms
  • 1 将所有的.a库解压成.o文件ar x xx.a 2 将所有的.o 文件合并成.aar rcs xx.b *.o 3 编译.a 静态库 1)生成对应的.o 文件 gcc -c a.c b.c 2)使用ar命令合成静态库 ar crs libjson.a *.o 3) 查看编译库使用的gcc ...
  • 最近一人在做一即时通讯SDK的项目,所以就用到了静态库的打包,开始遇到一些困难和莫名的bug,不过现在已经基本完成。现在,浅谈一下个人经验。首先,概述一些最基本的名词概念,也是为了大家能更好的理解我们...
  • IOS lib(.a)库冲突解决办法

    千次阅读 2015-04-17 14:31:15
    我想说的是像这种开源的使用率很高的源代码本不应该包含在lib库中,就算是你要包含那也要改名字是吧。不过没办法现在人家既然包含,我们就只有想办法分离了。 1.依次查看lib库所支持的框架类型。i386:模拟器,...
  • Xamarin静态类库的binding实际上是一C#与Objective-C方法间映射过程,由于第三方控件对iOS开发至关重要,因此官方文档中也对这块也做了完整的介绍...但对于一完全入门级的程序员来说,这块
  • iOS开发零碎知识点

    万次阅读 多人点赞 2018-04-02 17:28:41
    记录一些常用和不常用的iOS知识点,防止遗忘丢失。(来源为收集自己项目中用到的或者整理看到博客中的知识点),如有错误,欢迎大家批评指正;如有好的知识点,也欢迎大家联系我,添加上去。谢谢! 欢迎大家关注...
  • 摘要: iOS静态库 一、什么是库? 库是共享程序代码的方式。 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 iOS中的静态库有 .a 和 .framework两种形式...
  • xcode制作iOS静态库SDK ...原本不打算在分开发一遍这的,应该是包含在这篇Flash Air ANE for iOS 集成最新版本的友盟统计SDK.framework功能中的,但是由于ANE的开发需求一般太少,这静态库如何包含第三方SDK静态库
  • iOS库.a与.framework

    千次阅读 2017-02-21 17:51:48
    一、什么是库?...动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。 三、iOS里静态库形式? .a和.framework 四、iOS里动态库形式? .dylib
1 2 3 4 5 ... 20
收藏数 117,632
精华内容 47,052
关键字:

.a包含多个.a ios