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。
(二)
概要
- AppStore中的 iphone 程序不允许使用动态链接库。
- 如果需要在隐藏代码的前提下提供某些功能,可以使用静态链接库。
- 右击target,选择add -> newtarget
- 在弹出的 NewTarget 界面中选择Cocoa Touch -> StaticLibrary ,为新 library 取个名字。
- 将源文件添加到这个库。可以直接拖动现存源文件,也可以右击 -> add。注意选择新建的库为添加的 target 。
- 设置原项目,令其使用新建的库。
- 右击原项目的 target ,选择 getInfo 。
- 选择 General 选项卡
- 向 linked libraries 中添加新创建的库 (即添加 .a 文件)。
- 编译新建的静态库以产生 .a 文件。(右击静态库的 target ,选择build)
- 编译原项目,若可以调用静态库中的方法则添加成功。
- 可以直接删除静态库中的源代码,只提交链接库文件(.a),这样原项目仍然可以编译执行。
- Mac OS 下的静态链接库文件与linux 同样使用 .a 扩展名。
下边的是
http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4
的汉化翻译 加理解