2017-12-16 11:25:46 CC1991_ 阅读数 2565

       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年写的最后一篇博客,要想了解更多分享知识,咱们来年继续探讨交流,本人微信公众号也会不间断更新不同技术分享,欢迎大家关注!




2016-12-01 16:09:25 mofengluo 阅读数 230

网上很多教程-自己操作一遍整理了一下 。

我们在开发iOS的工作中可能会自己开发一些.a静态库或者打包一下别人的第三方类库包装成自己的.a文件。有时候我们引入一些C++编译的第三方文件时可能会出现编译的错误,但是我们如果打包成.a静态库时就很少会出现OC与C++混编的错误,原因很简单.a静态库文件是编译好的二进制文件,二进制文件与二进制文件互相混编当然没有什么问题。好那么接下来我们开始学习打包吧!

1.项目创建

2.生成一个.a文件 ;.h文件创建方法

3.m文件实现方法

4.command+B前 修改这个地方

5.。。。。。


6.看图介绍

7.生成的Debug和Release的a文件(iphoneos和iphonesimulator 真机和模拟器)

8.终端运行 将真机与模拟器a文件合并成一个a文件(合并成功文件大小是原文件的两倍大小)


9.添加到项目中去

2016-10-22 20:47:51 yixiao3660 阅读数 692

iOS 静态类库 编译 C,C++

我们都知道,OC 原生支持C, 在 创建的 OC类的 .m 里面,可以直接编写C的代码;

同样 Xcode 也支持 OC ,C++的混编,此时,我们通常把OC创建的 .m 文件,手动修改为 .mm 文件以支持 oc c++的混编

基于上面的特性,我们在打包静态类时,可以编译C,OC,C++ 以及三者混合的代码;

因为大多数夸平台的算法库代码都是C或是C++写的,我们利用Xcode编译成静态类库,可以非常安全的提供给别人使用

如下示例:

一:静态库打包 C 代码

1. Xcode 创建一个 静态类库项目,就是Cocoa Touch Static Library;

2. 创建好项目之后,File new,C file, 创建一个 A.c 文件;

   在 A.c 里面,写一个测试代码,假如 hello() 方法,是咱们的核心代码,不想让别人知道,只想给外界提供一个 方法名;hello()

void hello(void)
{
    printf("hello world!");  
}

  这时,我们可以再接着 创建一个 Header File ,命名为 A.h, 在该文件里面,写上  

void hello(void);

 上面 .c 文件的 方法名,即可;然后在 静态类库的选项里面,,把 .c 添加到 编译里面,把 .h 添加到 输出里面;

 这样,别人在拿到打包的 .a 之后,再配置头文件,,即可使用 hello() 方法;而不用 担心会暴露 hello()的内部实现;

 注意:在使用该静态库的时候,不要用 .mm , 用 .m ;因为此编译的是C方法,OC 原生支持C;

二:静态类库打包 C++ 代码

1. Xcode 创建一个 静态类库项目,就是Cocoa Touch Static Library;

2. New File 创建一个 C++ Class, 此时项目里面,会生成名为 A.cpp 和 A.h ;

   可以看到 以后 C++ 代码,方法的声明 放到 A.h 里面,,方法的实现 放到  A.cpp 里面,实现即可;

   在给别人打包提供时,同样把 cpp 放到编译里面,把.h 放到 输出里面,即可;

   如 我们在 A.h 里面同样放上 一个 c的 测试 hello(); 方法声明

void hello(void);

  在 A.cpp 里面,写上方法的实现

void hello(void)
{
    printf("hello world");
}

  打包编译,在使用的时候,我们就要用 .mm 了,而不能用 .m了,,

  虽然这两种方式写的同样的是 C的方法,但是意义不一样了;上面编译的是纯C,而下面的,虽然写的是c代码,但是编译的是C++;

 所以在调用此包时,要用 OC,C++混纺,即 .mm 文件;

 

三:总结注意

1. 如果编译纯C,.c文件, 用 .m 即是 OC,C混编;

2. 如果编译C++,.cpp文件,用 .mm 即是 OC C++混编;

3. .cpp的文件里面,可以调用写的 .c 文件,用 .mm 即 OC,C,C++混编;

 

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

2016-11-10 10:32:44 xiao_scy_xiao 阅读数 2103

1、需求

     我们在开发iOS的工作中可能会自己开发一些.a静态库或者打包一下别人的第三方类库包装成自己的.a文件。有时候我们引入一些C++编译的第三方文件时可能会出现编译的错误,但是我们如果打包成.a静态库时就很少会出现OC与C++混编的错误,原因很简单.a静态库文件是编译好的二进制文件,二进制文件与二进制文件互相混编当然没有什么问题。好那么接下来我们开始学习打包吧!


2、实例

 接下来我们就以打包IOS开发中常用的网络请求库AFNetworking为实例。

 1>我们需要准备好需要打包的AFNetworking





2>接下来我们开始新建一个工程文件取名WBAFNetWorking




3>接下来我们把准备好的AFNetworking拖入工程中,注意文件放在一级目录下。



4>接下来我们选择出来需要暴露出来的头文件



我选择暴露出所有的头文件如下图



5>接下来我们配置下工程文件





6>配置完之后我们就可以选择真机进行运行在运行后我们找到生成的.a文件右键选择show in finder就可以了。




7.此时生成的.a文件只适用于真机,如果我们需要模拟器可以使用的.a文件用同样的方法在模拟器上运行下就可以了,而且网上有很多教程可以合并两个.a文件在这里就不进行重述了。



原文链接:http://www.jianshu.com/p/e25e4b391a68

2017-12-13 09:24:52 weixin_33834679 阅读数 15

1、需求

     我们在开发iOS的工作中可能会自己开发一些.a静态库或者打包一下别人的第三方类库包装成自己的.a文件。有时候我们引入一些C++编译的第三方文件时可能会出现编译的错误,但是我们如果打包成.a静态库时就很少会出现OC与C++混编的错误,原因很简单.a静态库文件是编译好的二进制文件,二进制文件与二进制文件互相混编当然没有什么问题。好那么接下来我们开始学习打包吧!

2、实例

 接下来我们就以打包IOS开发中常用的网络请求库AFNetworking为实例。

 1>我们需要准备好需要打包的AFNetworking





2>接下来我们开始新建一个工程文件取名WBAFNetWorking




3>接下来我们把准备好的AFNetworking拖入工程中,注意文件放在一级目录下。



4>接下来我们选择出来需要暴露出来的头文件



我选择暴露出所有的头文件如下图



5>接下来我们配置下工程文件





6>配置完之后我们就可以选择真机进行运行在运行后我们找到生成的.a文件右键选择show in finder就可以了。




7.此时生成的.a文件只适用于真机,如果我们需要模拟器可以使用的.a文件用同样的方法在模拟器上运行下就可以了,而且网上有很多教程可以合并两个.a文件在这里就不进行重述了。

没有更多推荐了,返回首页