zoukankan      html  css  js  c++  java
  • 【iOS】配置和使用静态库

    上一篇 我们演示了了如何创建自己的静态库,最终生成多个.a文件,根据需要引用工程就可以直接使用静态库了,但是有个很麻烦的问题,模拟器用的库和真机的不是同一个,当我们切换的时候需要更换静态库,有两种方式可以改善这个问题

    一、合并静态库

    lipo –create Release-iphoneos/libsqlcipher.a Release-iphonesimulator/libsqlcipher.a –output libsqlcipher.a

      合并后的.a库就可以通用了

    二、配置工程库路径

      配置路径和编译参数后xcode会自动找到路径下的库引入到项目

      1、创建工程CalculatorTest,我们把编译好的静态库赋值到工程目录下

      

      2、设置Library Search Path,添加下面两个参数

       $(SRCROOT)/Libs/Debug$(EFFECTIVE_PLATFORM_NAME) 
       $(SRCROOT)/Libs/Release$(EFFECTIVE_PLATFORM_NAME)

        $(SRCROOT):表示当前工程的根路径,可以在右边看到实际对应的路径

        $(EFFECTIVE_PLATFORM_NAME):代表当前配置是OS,如果是模拟器则为-iphonesimulator,真机则为-iphoneos

        一般第三方库只提供Release版本,如果只有Release版,则两个都设置Release即可   

        

      3、设置编译参数

        Build Settings -> Linking -> Other Linker Flags

          添加:-lCalculator

        编译静态库的时候,xcode默认会自动把库名加上lib前缀

        注:
          1、前面加横杠'-',lib改为l
          2、如果静态库中有category,那么需要添加 -ObjC 参数标识,否则可能会报:unrecognized selector sent to instance 

          3、参数说明(引用自:http://www.cnblogs.com/robinkey/archive/2013/05/27/3101095.html

            -ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中

            -all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。

            -force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载                

          

          4、编译方式(引用自:http://blog.csdn.net/zhangkongzhongyun/article/details/8047500
            静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将XCode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"

      4、配置完成,添加头文件到工程

         

      5、编译测试,调用静态库内部方法

      

        调用成功

      6、Demo

        http://files.cnblogs.com/files/bomo/CompileStaticLibrary2.zip

  • 相关阅读:
    使用Jquery EasyUi常见问题解决方案
    短信平台接口调用方法参考
    linux查找日志技巧
    Linux 上传 启动 删除...命令总结
    java 验证手机号码、电话号码(包括最新的电信、联通和移动号码)
    Web Services 中XML、SOAP和WSDL的一些必要知识
    Mac环境下配置PhpStorm
    Python爬虫刷回复
    Django和layim实现websocket
    Python爬虫刷回复
  • 原文地址:https://www.cnblogs.com/bomo/p/4760791.html
Copyright © 2011-2022 走看看