• Xcode 之自己编译静态库


    今天介绍下,如何利用Xcode,新建一个静态库,以及如何编译成i386、armv7、armv7s 等平台架构。

    开发环境:MAC OS X 10.9.4 + Xcode 5.0.2

    背景知识:库分两种:静态库(.a、.lib) 和 动态库(.so、.dll),.a 和 .so 为linux平台下库后缀名,.lib 和 .dll 为windows平台下库后缀名。【对静态库和动态库不熟悉的,请参见博文:http://www.cnblogs.com/skynet/p/3372855.html 】。ios 开发,只允许使用.a静态库,不能像Android那样,可以使用.so 动态库,这也就是为什么网上的第三方组件,像百度、高德地图、新浪微博、友盟等sdk提供的都是一些.a 静态库文件 + 一些.h 头文件。i386架构下的静态库,是模拟器使用的;armv7、armv7s等是真机使用的静态库(注:i386架构下的静态库,在模拟器上运行正常,在真机上无法运行,编译会报错,两者不可混用,后面会详细介绍)。好了,废话不多说,下面步入正题:

    一:新建静态库

    1,打开Xcode,-》create a new xcode project  -》Framework & Library - > Cocoa Touch Static Library,next。

    2,填写 Product Name , Organization Name, Company Identity, 然后next。

    3,创建好项目后,目录结构如下所示:

    4,打开“MyCommon.h”文件,添加一个静态方法:+(void)myPrint:(NSString *)text; 

    5,  打开“MyCommon.m”文件,添加方法体:

    1. +(void)myPrint:(NSString *)text  
    2. {  
    3.     NSLog(@"myPrint:%@",text);  
    4. }  

    6,保存,编译,到此,我们的静态库就制作成功了。如下图所示:

    其中,要注意:图中红色1处,表示选中 IOS Device ,此时会生成 armv7、armv7s、arm64 架构的静态库;选中任一ios模拟器,则会生成i386架构下的静态库;图中红色2处,如果为红色,表示静态库尚未生成,如果为黑色,表示静态库生成成功。(ps:建议先选ios device 生成静态库,再选模拟器生成静态库)

    7,在上图中红色2处,右键,“show in Finder”,打开文件夹,就会看到我们生成的静态库文件了。



    8,现在生成的是Debug版本,如果想生成release版本的,可以在schema里编辑一下:菜单栏,Product - > Schema - > Edit Schema ,或者直接快捷键:command + < ,打开对话框,左边选择“Run”,右边 Build Configuration 中选择 Release ,ok.

    重新编译运行一下,release版本就生成了。重新打开刚才的文件夹,就会看到了。

    至此,我们的静态库就制作完毕了。下面介绍下如何使用:

    二、静态库的使用

    1,打开Xcode,create a new xcode project - 》 Empty Application,next。Product name:Test ,next,工程目录如下:

    2,在Supporting Files 中新建 Group:MyLibs,引入我们刚才自己生成的.a静态库和.h 头文件。【注意:要使用iphonesimulator 文件夹下的静态库,即i386架构的,否则,在模拟器上会编译失败。】之后,在"AppDelegate.m"中引入“MyCommon.h”头文件,在application:didFinishLaunchingWithOptions 方法中添加 这么这行代码:

    [MyCommon myPrint:@"hello world"];

    如下图所示:


    保存,编译,运行,就会看到图中4处红色部分:表示我们自己的静态库调用成功了。

    3,如果在上一步中,我们使用了真机的.a静态库文件,当用模拟器编译运行工程时,会提示如下错误:

    在错误信息中,我们也可以看到,找不到必需的i386架构的 libMyCommon.a 静态库文件。(相同的,如果使用真机测试,工程里却添加了模拟器使用的i386架构的静态库文件,也会报错,此时错误信息会诸如:missing required architecture armv7、armv7s 等)

    三、教大家如何查看静态库的架构信息,以及如何合并模拟器和真机静态库。

    1,首先打开Mac 终端,切换到静态库所在文件夹,输入如下命令:

     lipo -info libMyCommon.a

    回车,接着就会看到静态库的架构信息了,如图所示:

    此时,我们可以知道,上图中使用的静态库是armv7等架构的,即是真机使用的静态库。

    2,合并模拟器和真机静态库,在终端中输入命令:

     

     lipo -create  libMyCommon_iphone.a  libMyCommon_simulate.a  -output  libMyCommon.a

    ,之后,在终端当前文件夹下,就会看到合并后的静态库文件 libMyCommon.a 了。

    3,在刚才的测试工程中,换用我们刚刚生成的合并版本的静态库文件,这样,不管模拟器,还是真机,都可以直接调试运行了。

     

    摘自:http://blog.csdn.net/jiajiayouba/article/details/38420517    非常感谢博主的分享

  • 相关阅读:
    【USACO18JAN】MooTube G
    【JSOI2008】星球大战
    【ECF#87】小结
    【NOIP2013】火柴排队
    【USACO04OPEN】MooFest G
    【NOI OL #2】T3 游戏
    【NOI OL #2】T2 子序列问题
    简单NLT
    python中的位运算
    列表和元组
  • 原文地址:https://www.cnblogs.com/cy568searchx/p/5415795.html
Copyright © 2020-2023  润新知