• iOS开发过程中,有些时候需要生成打包.a静态库,然后拖入到项目中使用,尤其是有时候引入的一些C++编译过的第三方文件就会引起编译错误的提示,解决这种问题的方法很简单,就是把这些三方的文件打包生成.a静态库...

           iOS开发过程中,有些时候需要生成打包.a静态库,然后拖入到项目中使用,尤其是有时候引入的一些C++编译过的第三方文件就会引起编译错误的提示,解决这种问题的方法很简单,就是把这些三方的文件打包生成.a静态库文件,这样就解决了OCC++混编引起的错误,这种解决问题的原理是.a静态库文件时编译好的二进制文件,二进制文件与二进制文件相互混编肯定没有什么问题。

           一般情况下,打包.a静态库的大概步骤分为七步分:生成创建静态库、实现需要使用的类、设置公开类的.h文件、编译打包模拟器静态库、编译打包真机静态库、合并模拟器和真机编译好的静态库、拖入需要使用的项目中测试静态库。那么下面就分模块讲解打包.a静态库文件的步骤了。

          一、生成创建静态库

    1.打开Xcode,选择Create a new Xcode project新建项目,或者在已打开项目工程的情况下点击Xcode,使用快捷键command+shit+n创建新的项目;

    2.创建新的项目时候,在选择类型的里面,选择iOS-->Framework&Library-->Coaoa Touch Static Library,然后点击Next即可。





          二、实现需要使用的类

    1.创建静态库之后,把你想要打包成静态库的类文件都拖入到这个项目工程里面,然后把创建项目自动生成的那个类如果没有需要就把它直接删除即可;

    2.如果拖入整个文件夹进去,文件夹里面的所有类文件都要放在处于一级目录下面,尽量还是不要直接拖入文件夹,一般全选所有的类文件拖入即可。


          三、设置公开类的.h文件

    1.公开类的.h文件就需要添加Headers这个选项,具体步骤为:项目的TARGET-->Build Phases-->点击“+”号-->New Headers Phase
    2.然后找到刚才新加的Headers子目录下面的那个"+",点击“+”号添加所有需要公开的类的.h头文件;
    3.添加完所有需要公开的类的.h头文件之后,这些头文件都是处在Headers里面的Project子目录下,需要手动全选这些头文件直接拖入到上部的Public子目录下面。

    4.把类的.h文件全部拖入到Public里面之后,就成功设置为公开的头文件了。









          四、编译打包模拟器静态库

    1.打包编译之前需要配置一下工程文件,设置Scheme,有两个进入设置的方法,方法一:Xcode顶部菜单栏里面找到Product-->Scheme-->Edit Scheme...,找到Run-->Info里面-->Build Configuration里面选择Debug模式,选择之后点击Close;方法二:从Xcode里面直接进入,Edit Scheme...,找到Run-->Info里面-->Build Configuration里面选择Debug模式,选择之后点击Close即可。

    2.设置完Scheme之后,在项目运行程序类型选项里面,选择模拟器模式,然后使用快捷键command+b编译打包模拟器静态库;

    3.编译成功之后,Products中的.a文件会由红色变成黑色,这就说明编译打包的模拟器静态库打包成功。






          五、编译打包真机静态库

    1.上部分模拟器静态库打包编译成功之后,仍然在项目运行程序类型选项里面,选择真机模式,然后依然使用快捷键command+b编译打包真机静态库;

    2.编译成功之后,Products中的.a文件会由红色变成黑色,这就说明编译打包的真机静态库打包成功。



          六、合并模拟器和真机编译好的静态库

    1.上部分真机静态库打包成功之后,在Producets里面,用鼠标单击选中右键,Show in Finder显示文件位置,然后打开编译后的模拟器和真机的.a静态库文件的位置;

    2.你在Products文件了里面可以看到两个文件夹,Debug-iphoneos是真机的静态库文件位置,Debug-iphonesimulator是模拟器的静态库文件位置,然后打开电脑终端;

    3.在电脑终端里面,使用命令行的方式合并模拟器静态库和真机静态库文件,具体的命令行格式为:lipo -create "真机的.a静态库路径" "模拟器的.a静态库路径" -output "合并后的.a静态库路径"  这里需要特别注意两点:真机静态库路径 和 模拟器静态库路径之间的空格,合并后的静态库名字要和模拟器和真机静态库的名字一致。)

    4.如果以上操作没有出错,终端会在你指定的文件夹下生成一个合并版的.a静态库,找到你指定合并后的.a静态库存放位置,把合并之后的.a静态库拷贝出来。







          七、拖入需要使用的项目中测试静态库

    1.打开你想要使用.a静态库的项目,然后把你刚才复制出来的合并之后的.a静态库和所有的生成打包之后的类的.h文件都拖入到项目中;

    2.然后command+b看看是否报错,然后进行配置修改,一般没有问题,但是不排除你的文件拖入项目之后提示找不到的问题,自行排查一下即可;

    3.然后在你需要使用的具体地方,引入需要使用的.h文件,然后进行测试使用即可。到此,.a静态库的制作介绍完了。






           到此为止,生成.a静态库文件的步骤就全部结束了,同时也是本人2017年写的最后一篇博客,要想了解更多分享知识,咱们来年继续探讨交流,本人微信公众号也会不间断更新不同技术分享,欢迎大家关注!




    展开全文
  • 一、步骤:1....其它有用的功能:(1)查看某一个.a包都支持什么架构:lipo -info xxx.a(2)从一个.a包中抽取我们需要的架构:lipo -thin armv7 xxx.a -output yyy.a。二、说明:以后在发布可以库的时

    一、步骤:

    1.首先分别生成模拟器架构和真机架构的.a包,然后在合并。

    2.使用命令:lipo -create 模拟器架构.a 真机架构.a -output 兼容架构.a

    3.其它有用的功能:

    (1)查看某一个.a包都支持什么架构:lipo -info xxx.a

    (2)从一个.a包中抽取我们需要的架构:lipo -thin armv7 xxx.a -output yyy.a。


    二、说明:

    以后在发布可以库的时候不用发一个模拟器版的和一个真机版的了,这样子的一个库可以在编译的时候自动识别需要连接的库。那lipo到底是什么呢:

    lipo源于mac系统要制作兼容powerpc平台和intel平台的程序。

    lipo 是一个在 Mac OS X 中处理通用程序(Universal Binaries)的工具。现在发售或者提供下载的许多(几乎所有)程序都打上了“Universal”标志,意味着它们同时具有 PowerPC 和 Intel 芯片能够处理的代码。不过既然你可能不在意其中的一个,你也能够使用 lipo 来给你的程序“瘦身”。


    展开全文
  • 之前合成了静态库.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文件

    2015-10-28 09:14:21
    3、将需要暴露的.h文件暴露出来,.m会自动编译到.a文件中 4、分别选择真机设备和模拟器,command + B编译,staticTest会从红色变成黑色。真机和模拟器环境下用的.a文件是分开的。 5、在“Show in Finder ”,可以...

    制作.a

    1、新建项目 –> Cocoa Touch Static Library
    这里写图片描述

    2、添加库需要包含的代码
    这里写图片描述

    3、将需要暴露的.h文件暴露出来,.m会自动编译到.a文件中
    这里写图片描述

    4、分别选择真机设备和模拟器,command + B编译,staticTest会从红色变成黑色。真机和模拟器环境下用的.a文件是分开的。
    这里写图片描述

    5、在“Show in Finder ”,可以看到编译生成的.a 和 暴露的.h文件。
    这里写图片描述
    这里写图片描述


    Note:
    - Debug-iphoneos 文件夹里面的东西是用在真机上的
    - Debug-iphonesimulator 文件夹里面的东西是用在模拟器上的
    - 如果 Scheme 是 Release 模式,生成的文件夹就以 Release 开头
    调试版本 VS 发布版本
    - 调试版本会包含完整的符号信息,以方便调试
    - 调试版本不会对代码进行优化
    - 发布版本不会包含完整的符号信息
    - 发布版本的执行代码是进行过优化的
    - 发布版本的大小会比调试版本的略小
    - 在执行速度方面,发布版本会更快些,但不意味着会有显著的提升


    当我们需要打包的.a文件里面用到了图片等资源文件。此时我们不该直接把resource文件夹拖进项目,而是建立.bundle文件,然后把图片等资源放进.bundle里面管理。
    这里写图片描述
    这里写图片描述
    在其他项目中使用我们打包的.a文件时,只需要将.a文件和暴露的.h文件以及资源文件.bundle(有Xib时还需要拖Xib)拖进新项目即可使用。


    1. 如果想要使打包好的.a文件能同时在模拟器和真机上使用,需要将两个.a文件进行合并。在终端输入指令:
    lipo -create ~/Debug-iphoneos/libstaticTest.a ~/Debug-iphonesimulator/libstaticTest.a -output ~/libstaticTest.a

    即: lipo -create + 真机.a文件路径 + 模拟器.a文件路径 + -output + 合成.a文件的路径
    PS:可以通过 lipo -info .a文件路径 指令查看.a的类型


    调试.a

    1、创建一个application工程,可以正常运行。
    这里写图片描述

    2、此时我们需要在这个工程里添加静态库进行调试,点击targets下面的+号,添加libriary
    这里写图片描述
    3、此时在工程里面会出现静态库的文件夹,在此文件夹下面添加需要打包静态库的代码即可。
    这里写图片描述

    4、使用静态库,只需要将需要暴露的头文件引入project的类里。同时需要配置targets -> build Phases 下的Target Dependencies 和Link Binary With Libraries 添加我们创建的静态库.a。
    这里写图片描述

    5、打包静态库只需要选中静态库编译即可。具体打包方法同上。
    这里写图片描述

    展开全文
  • iOS库 .a与.framework区别

    2017-10-31 18:03:45
    一、什么是库? 库是共享程序代码的方式,一般分为静态库和动态库。 二、静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。....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暴露出来就可以了。

    展开全文
  • iOS 打包.a文件

    2014-10-27 23:02:46
    IOS 下的 cocoa touch static library。然后输入 product name 为 libsql 2、把libsql.h 和libsql.m删除。导入ocsqlite.h和ocsqlite.c 3、修改scheme,设为release版本 4. ...
  • 问题:iOS怎么查看.a静态库所有打包进去的.o文件和函数接口信息? 答案:其实就是使用 nm 命令,这个跟linux的命令是一样的。 正文: 本文来自 ...
  • 在众多开源的大神的博客里经整理如下:(已测试ok) ...制作.a静态库,需要要保证兼容性,包括不同iOS设备以及模拟器运行不出错,所以尽量做到最大的兼容性。 ValidArchitectures设置为:armv7|armv7s|arm6
  • iOS中的.a文件

    2017-06-01 16:54:08
    Objective-c语言有.h .m 文件组成。静态库可以将 .m文件封装成一个.a文件,第三方....a文件与 iOS静态库 首先看静态库和动态库的区别: 在实际的编程过程中,通常会把一些公用函数打包成函数库,供其它程序调用
  • 前言: 有时侯需要使用c++的一些代码库,这里先讲一下Xcode 建C++ 工程,并将代码编译成.a库,提供给demo使用。这里只是简单的介绍,以后会继续介绍如何将公开的C/C++源码编译成OC使用的静态库.a。 第一步 准备 a....
  • ios编译静态库.a文件

    2017-02-23 10:31:46
    近期在做关于静态库的工作,需要生成静态库(.a),查了一些资料,在此总结记录一下 1. 如果工程中引用其他第三方库文件,多于一个时,可以先将...查看静态库包含的:lipo -info xxx1.a  如果这些静态库是fat的,
  • 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 ...
  • 是 Mach Object的缩写,是Mac\iOS 上用于存储程序,库的标准格式! 常见的格式: 1.可执行文件 2.objcet .o 文件(目标文件) .a 静态库文件.其实就是N个.o文件的集合 3.DYLIB: 动态库文件 dylib framework 4.动态...
  • lipo -create SQY/iOS/iphoneos/libGamePlusAPI.a SQY/iOS/iphonesimulator/libGamePlusAPI.a -output SQY/iOS/libGamePus.a 其中SQY/iOS/iphoneos/libGamePlusAPI.a //为真机库。  SQY/iOS/iphone...
  • 一、创建静态项目创建一个新的工程,选择Framework & Library下面的Cocoa Touch Framework。二、在静态库中添加内容这里,我就把我自己平时封装的一个工具类拖进来。 三、设置对应的参数 Build Active Architecture...
  • 打开mac终端,输入以下命令查看.a库支持的平台架构命令格式...实际开发中我们希望引入一个.a库同时支持真机和模拟器,那么就会涉及合并.a包,命令如下:命令格式:lipo -create [待合并的.a] [待合并的.a] -output ...
  • 静态库可以将 .m文件封装成一个.a文件,第三方应用程序只需要拿到这个.a文件和代码对应的.h文件即可使用静态库中封装的方法。静态库适合制作SDK提供的第三方使用。 步骤如下:创建应用项目1.创建一个应用项目,也...
  • IOS 之.a文件的合并

    2014-10-22 15:05:23
    使用终端根据需要文件的目录
  • 首先先准备一个静态库.a文件,比如叫staticLibrary.a,放在桌面的test目录里。 分离arch 首先先file一下staticLibrary.a,看一下该文件包含几种arch。 ~ cd Desktop/test test ls staticLibrary.a test file ...
  • IOS 多工程依赖(.a)静态库和Bundle
1 2 3 4 5 ... 20
收藏数 145,439
精华内容 58,175
热门标签
关键字:

.a包 ios 查看