xcode 编译静态库所要注意
来源:互联网 发布:怎样在淘宝网上开店铺 编辑:程序博客网 时间:2024/05/17 01:47
一 建立静态库
1. 生成静态库工程
2. release/debug 的选择 scheme
3. 编译(注意真机与模拟器的产物)==》
lipo -create 【源文件路径1】 【源文件路径2】 -output 【目标文件】
二 使用
1. 插入.h(头文件引用,静态库不自包含头文件)和.a文件(静态库)
三 如果是再workspace中进行连编调试,补充如下
静态库工程(build setting)设置
1) 生成产品的路径
1.1 Installation Directory 设为 $(BUILT_PRODUCTS_DIR) //生成产品的路径
1.2 Skip Install 改为 yes
2) 设置公开的头文件
要选中.h文件,将Target Membership中设置为public。
3) 设置公开头文件的路径
public headers folfer path 设为 $(TARGET_NAME) //项目名作为头文件存放路径
使用工程设置
1) 添加静态库的头文件搜索路径
将User Header Search Paths设置为“$(BUILT_PRODUCTS_DIR)“ //其实这个工作区的产品都在一个共同的根目录下
2) 设置scheme依赖关系
3) 如果要单独使用,拷贝出头文件即可!
四 注意事项
1. 如果静态库中存在Objective-C风格的类文件,需要在build-setting中的Other linker flags中加上-ObjC,如果存在Category,还应加上-all_load或-force_load。
2. 隐藏静态库代码
直接删除静态库中的源代码,只提交链接库文件(.a),这样原项目仍然可以编译执行。
五 XCode项目中添加静态库的方法
- 右击target,选择add -> newtarget
- 在弹出的 NewTarget 界面中选择Cocoa Touch -> StaticLibrary ,为新 library 取个名字。
- 将源文件添加到这个库。可以直接拖动现存源文件,也可以右击 -> add。注意选择新建的库为添加的 target 。
- 设置原项目,令其使用新建的库。 (设置源文件不参加编译)
- 编译新建的静态库以产生 .a 文件。(右击静态库的 target ,选择build)
- 编译原项目,若可以调用静态库中的方法则添加成功。
网上有很多关于xcode制作第三方库的教程,我就不再记录,这里说一说我在制作静态库中遇到的问题,以及解决办法。
问题一: 静态库.a文件始终为红色,显示编译不成功。
解决办法:这是xcode的一个bug,先将编译模式设置为device,编译成功,再切换回simulator模式即可编译simulator对应的.a文件,路径为
解决办法:1、build settings中的Other Linker Flags添加-Objc选项。这个选项会促使链接器加载库中所有定义了Class和Category的文件。但这些额外的代码会使目标文件变大。但在64位和iOS应用程序中,linker有一个bug,这个bug会导致objc选项无效,无法从静态库中加载只定义了Category的文件 ,这就需要添加-all_load或-force_load选项。
2、网上搜了一圈,说还有更好的办法解决,来自于Three20的源代码。解决办法如下:
意思是定义一个空的class,使得包含该空class的文件能被加载,我试了试,仍然报错。。。只有先使用-force_load了/*** Add this macro before each category implementation, so we don't have to use* -all_load or -force_load to load object files from static libraries that only contain* categories and no classes.* See http://developer.apple.com/library/mac/#qa/qa2006/qa1490.html for more info.*/#define TT_FIX_CATEGORY_BUG(name) @interface TT_FIX_CATEGORY_BUG_##name @end \@implementation TT_FIX_CATEGORY_BUG_##name @end
- xcode 编译静态库所要注意
- xcode 编译静态库
- xcode 编译静态库 libcurl
- Xcode .a静态库编译
- Xcode 4.2 如何编译静态库
- xcode 编译静态库的问题
- Xcode 之自己编译静态库
- Xcode 之自己编译静态库
- Xcode 之自己编译静态库
- Xcode 之自己编译静态库
- Xcode 之自己编译静态库
- [XCODE 编译静态库] xcode 4 制作静态库详解 .a文件
- xcode 编译 静态链接问题
- shell编译xcode打包静态/动态库之shell编译xcode
- xcode合并模拟器和真机静态库的编译
- xcode合并模拟器和真机静态库的编译
- 用cmake 编译 xcode用的clucene静态库(一)
- 用cmake 编译 xcode用的clucene静态库(二)
- 20个常识之最-不要说你5个都说不出来
- POI2012题解
- Fragment异常: Error inflating class fragment
- Android应用层源码 进阶
- nyoj 19 擅长排列的小明
- xcode 编译静态库所要注意
- Xcode运行时不能选择模拟器
- 算法-删数
- python的安装 在win上使用py
- 反射基础
- 查看linux性能信息cpu-内存-硬盘-网卡
- CSS之派生选择器(上下文选择器)
- Android缓存技术
- 数据结构实验之栈二:一般算术表达式转换成后缀式