Xcode 编译静态库
有时候,我们需要将一部分经常用到的代码提取出来用来复用,或者说需要用到c++的代码的时候,可以通过编译成静态库的方式来使用。本文中使用的Xcode版本是8.3,静态库制作过程和其他版本基本一样,可能出现的内容有所差别,但并不影响制作。
1.创建一个静态库工程。
选择iOS->Cocoa Touch Static Library,如下图所示。
创建完成后,工程中会出现两个文件.h和.m,文件名是你的工程名,将.h中的所有内容删除,将.m文件删除,如下图:
2.导入依赖库和需要编译的文件。
导入你的工程需要的依赖库,这个不用我说吧。在TARGETS->Build Phases->Link Binary中添加所需要的库即可。导入文件也不说了,记得勾选copy和group,直接在工程中创建也行啊。如下图是我导入的两个文件。
在ThirdLib.h中添加你需要提供给外部的接口的头文件,然后在TARGETS->Build Phases中添加Headers,先点击一下空白处,然后在navigation上找到Editor,如下图。
将需要暴露给外部的文件拖入相应的栏目下面,public、private、project,根据情况选择。我这里只想把ThirdLib.h暴露出来,所以只将ThirdLib.h拖入public中,如果想将某个类的接口细节,暴露也可以拖到public下面。如下图。
还有另一种方法也可以,点击你需要暴露的文件,在Xcode的右边有个membership的选项,可以修改属性。
3.其他配置
找到target->build settings 搜索public,用如下图的方式替换。这样做,会在你编译之后出现一个叫include的文件夹在你的静态库中,里面包含了你暴露给外界的信息。
到这一步,已经完成了一大半工作。接下来只需改几个地方即可进行编译。这几个地方的修改不必须的(不会对静态库造成太大的影响):
Dead Code Stripping设置为NO,Strip Style设置为Non-Global Symbols,都是在target->build setting中找到并修改。一切都配置完后,选择build设备,如果选择模拟器,则会编译成只支持模拟器的静态库;如果选择真机,则会编译成只支持真机的静态库。先不管这些,将两种都生成出来,放在桌面两个不同的文件夹中,一个支持真机静态库,一个支持模拟器静态库。右键工程中product文件夹中的.a文件,show in finder。如下图是我编译出的两个静态库。
然后在终端查看这两个静态库的信息,先进入文件夹,用命令,lipo -info libThirdLib.a查看,如下图。
可以看到,它们支持的系统框架不同,模拟器是x86_64,真机是arm64,只能支持单一的目标肯定是不行的啊,不可能一直更换静态库吧。既然如此,我们需要把这两个静态库合并成一个。
首先,将这两个库放在桌面两个不同的文件夹中,不这样也可以,主要是为了找绝对路径方便。然后使用命令 lipo -create 模拟器静态库的绝对路径 真机静态库的绝对路径 -output 静态库绝对路径。如下图。
这样,在general中就会存在一个静态库thirdLib.a真机和模拟器都支持。
到这里,静态库制作就完成了,很简单的过程,希望能帮到需要的小伙伴。下一篇,会讲framework,因为本人也不是很清楚,研究懂了之后会发表出来。再见~
Xcode 编译静态库的更多相关文章
- xcode编译静态库选择cpu架构
此前编译了一个静态库,默认支持了armv7,armv7s,arm64 编译的话肯定是上面三个静态库分别编译出来,然后在把这三个合并成一个单独的库. 如果单个库的大小是10M,那编译总的库大概就30M了 ...
- Xcode 生成静态库相关设置:
Xcode 生成静态库相关设置: #Build Setting1. Architectures ------- Architectures -----> $(ARCHS_STANDARD) -- ...
- xcode 制作静态库.a文件 详解
http://blog.csdn.net/kepoon/article/details/21516977 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Fram ...
- 【iOS】编译静态库
与java和.net一样,objc也由类库的概念,不过在在objc上一般叫库,库表示程序代码集合,可以共享给其他程序使用,库是编译后的二进制文件,因此不能看到源代码,多用于一些开放sdk(如百度地图s ...
- Xcode 创建静态库和动态库
1.linux中静态库和动态库区别: 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 静态库:这类库的名字一般是libxxx.a:利用静态函数库编译成的文件 ...
- iOS xcode创建静态库封装自己的SDK及使用
https://www.cnblogs.com/JustForHappy/p/5773039.html 一,静态库和动态库的区别在这里就不说了,个人感觉如果是自己封装提供别人下载的话应该是静态库比较方 ...
- 关于使用Visual编译静态库动态库及其使用的问题
本文主要讲述了如何使用Visual Studio 2013 编译静态库和动态库,并使用. 一.静态库 1. 编写静态库 若要创建将引用并使用刚创建的静态库的应用程序,请从“文件”菜单中选择“新建”, ...
- android ndk-build 编译静态库libxx.a 以及Android studio openssl 静态库配置(cmake)
android ndk-build 编译静态库libxx.a 需求场景: 目前有安卓编码好的现在的openssl的两个.a,我们需要调用openssl的函数,并把功能再封装成.a; 这样使用时,在an ...
- 【转】TI DSP C6657学习之——编译静态库.lib
熟悉C++开发的的小伙伴都知道,我们一般代码中往往要引入许多第三方编译好的库,有些是静态链接库static library, 有些是动态链接库dll.引入库的目的一是减少代码的编译时间,二是只提供函数 ...
随机推荐
- 003实现字符串反转reverse
这个简单就直接代码了 //写代码翻转一个C风格的字符串. (C风格的意思是"abcd"须要用5个字符来表示,包括末尾的 结束字符) #include <stdio.h> ...
- Docker Python API 与 Docker Command
span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span. ...
- C#反射取数组单个元素的类型
去bing上查了一下,果然有和我一样蛋疼的朋友,他们在论坛研究了半天,最后还是暴力解决: public Type GetArrayElementType(Type t) { string tName ...
- ubuntu MySQL数据库输入中文乱码 解决方案
一.登录MySQL查看用SHOW VARIABLES LIKE ‘character%’;下字符集,显示如下:+--------------------------+----------------- ...
- The Definitive Guide To Django 2 学习笔记(五) 第四章 模板 (一)基本模板系统
引入模板系统的原因,view中引入硬编码并非明智的选择,设计上的任何改变都会需要改动代码.python代码和HTML代码应该分开,这是多数Web站点的共识,分开会提高效率. 基本模板系统 Django ...
- 谈谈哥的python爬虫书写之路
为了做一个百度网盘搜索引擎,哥开始研究爬虫,从此迷上爬虫而一发不可收拾,现在就大概谈谈哥的爬虫之路,顺便给出引擎:http://www.quzhuanpan.com 首先基本的 Python 语法你要 ...
- 飞思卡尔烧写工具mfgtools的使用
MFGTool是飞思卡尔提供的烧写工具,使用起来非常方便.但是,在使用MFGTool有几点是需要注意的,否则就会在烧写过程中遇到一些问题: 1.在使用MFGTool前,文件cfg.ini 和 UICf ...
- poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙
/** 题目:poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙 链接:http://poj.org/problem?id=3680 题意:给定n个区间,每个区间(ai,bi ...
- 阿里云经典网络和专有 专有自己设置网络和私网IP
阿里云网络系列之经典网络和专有网络 驻云科技 2016-07-29 13:43:44 浏览45005 评论9 云栖社区 nginx 安全与风控 系统软件 编程语言 数据存储与数据库 系统研发与运维 ...
- wget命令 -c断点续传
wget -O wordpress.zip http://www.linuxde.net/download.aspx?id=1080 下载文件在指定位置并进行重命名 -O file - ...