• xcode 静态链接库的问题


    Xcode4中使用静态库
    1. 创建一个工作区:".xcworkspace"
    2. 将项目添加到工作区(新建/添加现有项目)
    3. 向应用程序target添加静态库,从Workspace
    4. 打开 “Build Settings” 标签,设置 “User Header Search Paths” 项的值为“$(BUILT_PRODUCTS_DIR)”,并选中“Recursive”框
    5. 设置“Other Linker Flags”项的值为“-ObjC”
    6. 打开scheme,设置build顺序,将静态库添加进来,并放在程序前面
    7. 从静态库项目中拖动公共头文件到应用程序项目,这些头文件不需要被包括在target中

    创建静态库
    1. 将所有需要公开的头文件在“Target Membership”中将其设置为“public”
    2. 打开 “Build Settings” ,设置“InstallationDirectory”的值为“$(BUILT_PRODUCTS_DIR)”;并设置“SkipInstall”的值为“Yes”
    3. 设置“Public Headers Folder Path”的值为 “$(TARGET_NAME)”

     

    参考原文:http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

     

    下边是各种使用经验:

    (一)

    1、以xcode的静态库文件模板创建静态库文件;

    2、注意类文件的命名方式,以免和工程下的类冲突;

    3、把需要作为接口的头文件声明为public,在xcode的target membership设置里面;

    4、在静态库文件的引用target里面设置静态库文件的安装目录为当前工程的编译目录下,使得当前工程目标能在此目录下找到静态库文件,当前工程编译目录引用为$(BUILT_PRODUCTS_DIR);

    5、设置静态库的公共头文件目录路径,使之在当前工程编译后放置于以静态库命名的文件目录下,即使得第4步的能找得到静态库文件的接口;

    6、如果静态库中存在Objective-C风格的类文件,需要在静态库的build-setting中的Other linkerflags中加上-ObjC,如果存在Category,还应加上-all_load或-force_load。

     

    (二)

    概要

    1. AppStore中的 iphone 程序不允许使用动态链接库。 
    2. 如果需要在隐藏代码的前提下提供某些功能,可以使用静态链接库。

    XCode项目中添加静态库的方法
    1. 右击target,选择add -> newtarget 
    2. 在弹出的 NewTarget 界面中选择Cocoa Touch -> StaticLibrary ,为新 library 取个名字。
    3. 将源文件添加到这个库。可以直接拖动现存源文件,也可以右击 -> add。注意选择新建的库为添加的 target 。
    4. 设置原项目,令其使用新建的库。
      • 右击原项目的 target ,选择 getInfo 。
      • 选择 General 选项卡
      • 向 linked libraries 中添加新创建的库 (即添加 .a 文件)。
    5. 编译新建的静态库以产生 .a 文件。(右击静态库的 target ,选择build)
    6. 编译原项目,若可以调用静态库中的方法则添加成功。

    怎样隐藏静态库的代码 
    1. 可以直接删除静态库中的源代码,只提交链接库文件(.a),这样原项目仍然可以编译执行。

    备注:
    1. Mac OS 下的静态链接库文件与linux 同样使用 .a 扩展名。
    参考资料

    原参考处

     

    下边的是 

     

    http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4

    的汉化翻译 加理解

    http://xiaoruanjian.iteye.com/blog/912478

  • 相关阅读:
    浏览器输入一个url到整个页面显示出来经历了哪些过程?
    ajax
    为什么JS是单线程?JS中的Event Loop(事件循环)?JS如何实现异步?setimeout?
    jQuery中ready方法的实现
    this+call、apply、bind的区别与使用
    内存泄漏、垃圾回收机制、哪些情况会导致内存泄漏
    浏览器同源策略和跨域方法
    node.js
    JS原型、原型链、构造函数、实例与继承
    JS常用操作节点的方法
  • 原文地址:https://www.cnblogs.com/chenfulai/p/2505806.html
Copyright © 2020-2023  润新知