zoukankan      html  css  js  c++  java
  • iOS开发之静态库.a 以及合并

    静态库和动态库

    静态库和动态库的存在形式
    静态库: .a 和 .framework

    动态库: .dylib 和 .framework

    静态库和动态库在使用上的区别
    静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝

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

    制作 .a

    新建项目-> 选择 “Cocoa Touch Static Library”

    就在.h文件中,写入功能函数!简单的直接写入1个方法,并实现方法,例子是把输入的字符串打印两边

    #import <Foundation/Foundation.h>
    
    @interface MyStaticLibraryDM : NSObject
    
    //将输入的字符串打印两边
    -(void)printMyInput:(NSString*)inputString;
    
    @end
    #import "MyStaticLibraryDM.h"
    
    @implementation MyStaticLibraryDM
    
    -(void)printMyInput:(NSString*)inputString{
    
        NSLog(@"inputString === %@ twice is ==== %@",inputString,inputString);
    }
    
    @end

    然后,调试代码无误后,就可以进行编译了

    编译静态库

    注意:需要修改Build Settings中的 Build Active Architecture Only 以满足运行不同CPU环境的模拟器。 将此设置为NO。

    在不同编译环境下编译会生成四种静态库,debug模拟器,debug真机,release模拟器,release真机,我们需要将运行环境调至不同的状态并生成如上四种形式的静态库。这里只以一种情况为例:
    设置是Debug还是release
    选择Edit Scheme--> Buid Configuration设置为release
    设置模拟器还是真机
    就是设置模拟器还是真机,因为之前我们将只编译当前环境设置为NO,所以编译出来的静态库会支持各种CPU环境。

    最后按住 command+b 编译!

    你会发现你的静态库文件从红色变成了黑色,这就是编译完成了啊。可以 show in finder 查看文件所在位置。

    上面是我在不同环境运行之后的结果

    Debug-iphoneos 文件夹里面的东西是用在真机上的
    Debug-iphonesimulator 文件夹里面的东西是用在模拟器上的

    其他是在Release模式环境生成的 

    如果想让一个 .a 文件能同时用在真机和模拟器上,需要进行合并
    在终端输入指令

    lipo -create 静态库1 静态库2 -output 新静态库名称.a
    localhost:~ micaimanong$ cd /Users/micaimanong/Library/Developer/Xcode/DerivedData/MyStaticLibraryDM-fczwjaefnkvdmjelggxccgpicgwy/Build/Products 
    localhost:Products micaimanong$ lipo
    -create Debug-iphoneos/libMyStaticLibraryDM.a Debug-iphonesimulator/libMyStaticLibraryDM.a -output libMyStaticLibraryDM.a

    先进入products 在将其中的两个合并 合并之后生成一个新的.a文件 

    如下图所示 libMyStaticLibraryDM.a 支持模拟器和真机

    最后就是引用了

    在你的要使用太静态库的项目中导入libMyStaticLibraryDM.a文件和include文件夹中的相应的所有.h头文件。
     
    例如,我要在MyLibraryTest项目中,使用我上述编译好的静态库文件。
     
    导入完成后,项目如下:
     

    之后引用文件并实现方法

    打印如下 将输入的字符串打印了两边

    如果遇到下面的问题

    原因是你导入错误的编译版本。
    以上错误,是你的库文件(.a)为真机版本,你却用模拟器来调试程序。将调试目标换成真机,或者使用合并之后的(.a)文件也可以解决。

    操作时会遇到很多问题,具体问题具体对待。

  • 相关阅读:
    希腊字母大全
    SQL 等值连接(内连接)、自然连接(Out join,Left join,Right join)的区别
    JDK11 JAVA11下载安装与快速配置环境变量教程
    “由爱故生忧,由爱故生怖。若离于爱者,无忧亦无怖”
    How to use special characters in XML?
    Crow’s Foot Notation
    How do I unmute my Lenovo laptop?
    Nginx学习笔记--001-Nginx快速搭建
    Nginx 相关介绍
    java使用httpclient封装post请求和get的请求
  • 原文地址:https://www.cnblogs.com/carlos-mm/p/6489395.html
Copyright © 2011-2022 走看看