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.引入库的目的一是减少代码的编译时间,二是只提供函数 ...
随机推荐
- applicationCache
<html manifest="/m.appcache"> window.applicationCache.onupdateready = function (e) { ...
- 当 ftp 遇上 http Proxy
在asp.net 开发中,有时需要使用到ftp 上传文件, 如果客户电脑使用http proxy 上网, 那么,客户电脑在使用ftp上传文件时,可能会出现以下错误: 使用 HTTP Proxy 時,不 ...
- UNIX网络编程卷1 时间获取程序client UDP 协议无关
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP.协议无关,调用 getaddrinfo 和 udp_client **/ ...
- 完整学习使用CSS动画【翻译】
注:原文有较大改动 使用keyframes, animation属性,例如timing, delay, play state, animation-count, iteration count, d ...
- zepto,kissy前端框架实现跨域
三.jsonp的原理:带有src属性标签的跨域资源获取能力,在jsonp中通常使用<script>标签,因为<script>标签获取的跨域资源可以使用回调函数直接处理 json ...
- Jquery学习笔记(1)--JQuery原理,与JS对象互换,核心函数
js对象转jQuery对象,$('num'), jQuery对象转js对象,$('num')[0],或$('num').get(0). 1.点击换行,each(),html(),attr(),每个h1 ...
- c# 文件操作 txt、xml、ini
1. txt文件 /// <summary> /// 读文本文件信息 /// </summary> /// <param name="FilePath" ...
- Unix系统编程()main函数的命令行参数
命令行参数输入双引号是什么效果? 好像可以去空格化.
- STM32相关网址学习
http://www.stmcu.org/ stm32中文社区
- flutter 环境
以下内容copy 于 https://www.cnblogs.com/lovelyYakir/p/7610396.html 原文请参考此 我只是做个记录 第一步:安装Git 你需要安装Git作为Flu ...