【iOS】配置和使用静态库
来源:互联网 发布:天津seo网络推广 编辑:程序博客网 时间:2024/06/13 09:53
一、合并静态库
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
- 【iOS】配置和使用静态库
- iOS 静态库使用的配置 -ObjC
- ios制作和使用静态库
- iOS如何创建和使用静态库
- iOS中的静态库制作和使用
- iOS动态库和静态库的简单使用
- ios中静态库和动态库的使用
- iOS开发:xcode4中使用静态库和工作区
- iOS开发:xcode4中使用静态库和工作区
- ios 开发中 制作和使用静态库
- ios 模拟器和真机 使用同一静态库
- iOS开发:xcode4中使用静态库和工作区
- iOS开发:xcode4中使用静态库和工作区
- iOS开发:xcode4中使用静态库和工作区
- ios 开发中 制作和使用静态库
- iOS开发:xcode4中使用静态库和工作区
- iOS静态库的编译和lipo命令的使用
- iOS开发:xcode4中使用静态库和工作区
- java实例化对象
- 卡特兰数
- PHP 基础教程2
- 安卓系统的启动流程(源码分析)
- 二分查找
- 【iOS】配置和使用静态库
- UI设计——磨皮
- 一起talk C栗子吧( 第一百五十回:C语言实例--socket通信接口二)
- Leetcode 76. Minimum Window Substring
- LINUX SHELL控制结构
- 设计师和程序员-拓展知识关系网
- java读写文件,读超大文件
- Java千百问_06数据结构(017)_什么是二维数组
- MSSQL之四 简单查询