Xcode 之自己编译静态库

2023-10-31

今天介绍下,如何利用Xcode,新建一个静态库,以及如何编译成i386、armv7、armv7s 等平台架构。

开发环境:MAC OS X 10.9.4 + Xcode 5.0.2

背景知识:库分两种:静态库(.a、.lib) 和 动态库(.so、.dll),.a 和 .so 为linux平台下库后缀名,.lib 和 .dll 为windows平台下库后缀名。【对静态库和动态库不熟悉的,请参见博文:http://www.cnblogs.com/skynet/p/3372855.html 】。ios 开发,只允许使用.a静态库,不能像android那样,可以使用.so 动态库,这也就是为什么网上的第三方组件,像百度、高德地图、新浪微博、友盟等sdk提供的都是一些.a 静态库文件 + 一些.h 头文件。i386架构下的静态库,是模拟器使用的;armv7、armv7s等是真机使用的静态库(注:i386架构下的静态库,在模拟器上运行正常,在真机上无法运行,编译会报错,两者不可混用,后面会详细介绍)。好了,废话不多说,下面步入正题:

一:新建静态库

1,打开Xcode,-》create a new xcode project  -》Framework & Library - > Cocoa Touch Static Library,next。

2,填写 Product Name , Organization Name, Company Identity, 然后next。


3,创建好项目后,目录结构如下所示:


4,打开“MyCommon.h”文件,添加一个静态方法:+(void)myPrint:(NSString *)text; 

5,  打开“MyCommon.m”文件,添加方法体:

[objc]  view plain copy print ?
  1. +(void)myPrint:(NSString *)text  
  2. {  
  3.     NSLog(@"myPrint:%@",text);  
  4. }  
6,保存,编译,到此,我们的静态库就制作成功了。如下图所示:

其中,要注意:图中红色1处,表示选中 IOS Device ,此时会生成 armv7、armv7s、arm64 架构的静态库;选中任一ios模拟器,则会生成i386架构下的静态库;图中红色2处,如果为红色,表示静态库尚未生成,如果为黑色,表示静态库生成成功。(ps:建议先选ios device 生成静态库,再选模拟器生成静态库)

7,在上图中红色2处,右键,“show in Finder”,打开文件夹,就会看到我们生成的静态库文件了。



8,现在生成的是Debug版本,如果想生成release版本的,可以在schema里编辑一下:菜单栏,Product - > Schema - > Edit Schema ,或者直接快捷键:command + < ,打开对话框,左边选择“Run”,右边 Build Configuration 中选择 Release ,ok.

重新编译运行一下,release版本就生成了。重新打开刚才的文件夹,就会看到了。

至此,我们的静态库就制作完毕了。下面介绍下如何使用:

二、静态库的使用

1,打开Xcode,create a new xcode project - 》 Empty Application,next。Product name:Test ,next,工程目录如下:


2,在Supporting Files 中新建 Group:MyLibs,引入我们刚才自己生成的.a静态库和.h 头文件。【注意:要使用iphonesimulator 文件夹下的静态库,即i386架构的,否则,在模拟器上会编译失败。】之后,在"AppDelegate.m"中引入“MyCommon.h”头文件,在application:didFinishLaunchingWithOptions 方法中添加 这么这行代码:

[MyCommon myPrint:@"hello world"];

如下图所示:


保存,编译,运行,就会看到图中4处红色部分:表示我们自己的静态库调用成功了。

3,如果在上一步中,我们使用了真机的.a静态库文件,当用模拟器编译运行工程时,会提示如下错误:


在错误信息中,我们也可以看到,找不到必需的i386架构的 libMyCommon.a 静态库文件。(相同的,如果使用真机测试,工程里却添加了模拟器使用的i386架构的静态库文件,也会报错,此时错误信息会诸如:missing required architecture armv7、armv7s 等

三、教大家如何查看静态库的架构信息,以及如何合并模拟器和真机静态库。

1,首先打开Mac 终端,切换到静态库所在文件夹,输入如下命令:

 lipo -info libMyCommon.a

回车,接着就会看到静态库的架构信息了,如图所示:


此时,我们可以知道,上图中使用的静态库是armv7等架构的,即是真机使用的静态库。

2,合并模拟器和真机静态库,在终端中输入命令:

 lipo -create  libMyCommon_iphone.a  libMyCommon_simulate.a  -output  libMyCommon.a

,之后,在终端当前文件夹下,就会看到合并后的静态库文件 libMyCommon.a 了。


3,在刚才的测试工程中,换用我们刚刚生成的合并版本的静态库文件,这样,不管模拟器,还是真机,都可以直接调试运行了。

【PS:如有不对或表述不清之处,欢迎大家留言。】


转自:http://blog.csdn.net/jiajiayouba/article/details/38420517



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xcode 之自己编译静态库 的相关文章

  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • 在 UIWebView 中播放 Facebook 视频

    有谁知道如何在 Facebook 上播放视频UIWebView 我的应用程序将视频上 传到 Facebook 并检索视频的网址 我想将此网址嵌入到UIWebView播放 我已经为 youtube 解决了这个问题 但没有为 Facebook
  • TableViewController 的 viewDidLoad 未触发

    我一直在关注这个tutorial http www appcoda com ios programming sidebar navigation menu 有一个滑出式菜单 我添加了一个 TableViewController 它将显示文章
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的
  • 更改 NSMutableAttributedString 中链接的颜色

    我有以下代码 但我的链接始终是蓝色的 我如何改变它们的颜色 string addAttribute NSLinkAttributeName value tag range NSMakeRange position length string
  • 修改 SCNParticleEventBlock 中的 SCNParticleSystem 颜色不起作用

    鉴于提供的示例代码handle forProperties handler https developer apple com documentation scenekit scnparticlesystem 1523251 handle
  • React Native Detox:无法接受系统警报弹出的位置权限

    使用以下命令从命令行启动应用程序detox test configuration ios sim debug 通过代码启动应用程序await device launchApp permissions location always noti
  • 寻找可靠的方法来选择iPhone 13微距相机设备

    我正在使用 objc 开发一个应用程序 我必须选择 iPhone 13 Pro 和 13 Pro Max 中配备的新微距摄像头 目前 我在所有其他设备上选择我的相机 并剪掉此代码 AVCaptureDeviceDiscoverySessio
  • 如何在气隙 Mac 上安装新的 Apple 全球开发者关系中级证书?

    您可能知道也可能不知道 现在使用新的中间证书生成新的签名证书 你可以在这里读到它 https developer apple com support wwdr intermediate certificate https developer
  • iOS9 Sprite 套件问题

    一切都很顺利 直到我升级到 xCode 7 和 iOS 9 我当前的项目是一个 2D 平台游戏 自从升级以来 我就陷入了我们许多人似乎都面临的精灵套件错误 错误的困扰 我的问题是 每次游戏在模拟器或设备上运行时 所有精灵的 zPositio
  • 为什么我需要 2 个或更多核心数据模型?

    我很想知道谁使用多个核心数据模型以及为什么 有什么好处 我正在开发一个应用程序 我认为我可以从多个模型中受益 但我不确定其他好处 我即将推出的应用程序将适用于 iPad 和 iPhone 的另一个版本 iPad 有 3 个主要内容 iPho
  • Objective c RSA 与 OAEP 填充 sha256 之前的 ios 10

    我正在研究一种在iPhone中使用RSA加密方法的加密方法 到目前为止我可以用这种方法实现获取加密字符串 该字符串被服务器成功解密 SecKeyRef keyRef self addPublicKey pubKey SecKeyAlgori
  • 使用 HTTP NSURL 创建 AVAsset

    我正在尝试合并两个NSURLs包含视频参考 其中一个 URL 指向 AWS 上的视频 另一个 URL 指向本地存储的视频 我的导出代码有效 因为我已经尝试使用两个本地视频 但每当我尝试合并 HTTP url 和本地 url 时 我都会收到此
  • ios GPUImage,小尺寸图像处理效果不好?

    我正在尝试为 OCR 准备图像 我使用 GPUImage 来完成 代码工作正常 直到我裁剪图像 裁剪后我得到了糟糕的结果 作物面积 https www dropbox com s e3mlp25sl6m55yk IMG 0709 PNG h
  • 如何将 RGB 值转换为十六进制字符串 iOS swift

    我想将 RGB 值转换为十六进制字符串 我将十六进制转换为 RGB 如下所示 但反之亦然 func hexStringToRGB hexString String gt red CGFloat green CGFloat blue CGFl
  • 当键盘出现时调整 UITextView 的大小

    我想在键盘出现时调整文本视图的大小 我的代码如下 我打开了自动布局 因此使用来自超级视图的 textView gt bottom 空间的约束 并通过 IBOutlet distanceFromBottom 引用它 void keyboard
  • iOS 上的推送通知渐进式 Web 应用程序

    我需要开发一个集成了推送通知的渐进式网络应用程序 在网上搜索我发现了关于这个主题的不同意见 如果我理解正确的话 目前我们无法在移动版 safari 中推送通知 但仅限桌面版 这样对吗 你有什么建议来获得相同的结果吗 我不是iOS专家 我想知
  • 如何从 App Store Connect 中删除自动创建的 macOS 应用程序

    I have an iOS app Recently macOS app automatically appeared in App Store Connect 我不打算在 macOS 上发布 iOS 应用程序 我怎样才能摆脱它 我打开了
  • ios swift 如何将默认语言设置为阿拉伯语?

    我正在开发一个有两种语言的应用程序 即英语和阿拉伯语 我用英语编写了该应用程序 然后用阿拉伯语本地化了该应用程序 更改语言时需要重新启动应用程序 我唯一的问题是 第一次安装应用程序时如何将默认语言设置为阿拉伯语 我尝试在编辑方案部分将语言设

随机推荐

  • OpenSSL EVP_EncryptInit 函数官方详解

    OpenSSL EVP EncryptInit 函数官方详解 https www openssl org docs manmaster crypto EVP EncryptInit html
  • 新星计划、原力计划新动态,大波的奖牌来袭速来领取

    catalogue 写在前面 原力计划 新星计划 大波奖牌来袭 微软学生开发者峰会 写在最后 写在前面 哈喽 大家好 我是几何心凉 这是一份全新的专栏 得到CSDN王总的授权 来对于我们每周四的绿萝时间 直达CSDN 直播内容进行总结概括
  • 抓住推特群推营销红利,实现低成本精准获客

    随着Twitter在社媒营销中所占流量越来越高 现在做推特引流不会群发 都不敢说自己会玩 使用大量的账号 全天24小时自动发推 抢占搜索热门 进行推特营销时 通过推特群发可以让你的信息快速传播 从而提高你的品牌知名度和推广效果 以下是进行推
  • 单片机论文参考:3、基于单片机的电子万年历设计

    摘要 随着社会 科技的发展 人类得知时间 从观太阳 摆钟到现在电子钟 不断研究 创新 为了在观测时间 能够了解与人类密切相关的信息 比如星期 日期等 电子时钟诞生了 它集时间 日期 星期等功能于一身 具有读取方便 显示直观 功能多样 电路简
  • 写一个查找算法找出数组中相同的元素

    1 import java util ArrayList 2 3 public class Test 4 5 原始数据data 假设data数组中的数据元素已经按照某种顺序排好 6 但是 该数组中的数据元素重复出现 7 我们的目的是查找 解
  • html在线校验器,代码检查错误必备工具-HTML标签检测器

    很多人编写网站代码时 经常会忘记写开始或结束标签 虽然有些标签缺失对网站没有很大影响 但是站在优化角度 一个标签的错误可能会使你的网站在搜索引擎中的评分降低 从而影响关键词排名进度 但是一个网站已经写了很多代码 如何检查错误尤其是标签错误成
  • 以U-NET为例的网络构建代码实现

    写在前面 最近在读U Net论文时 网上看到从零构建网络模型的代码 代码足够间接 而且结构比较完整 因此记录一下学习结果 本文重点在于如何代码的实现 对于U Net论文中的细节未涉略 关于论文的讨论可移步 学习的资源链接在文章末尾 U ne
  • python+pytest+selenium+allure实战

    selenium是一个针对web端项目的模拟鼠标和键盘操作的自动化测试工具 pytest是一个和unittest类似的自动化测试框架 但它比unittest更加方便 并且可以兼容unittest框架 项目结构 common 存放公共方法 比
  • 重力球——重力感应器应用

    首届 Google 暑期大学生博客分享大赛 2010 Andriod 篇 之前在网上看到一个HTC的Windows Mobile手机中的一个应用重力感应器的程序 蛋疼的小球 地址 http v youku com v show id XMT
  • Python字符串的常用方法(3-3)

    目录 一 字符串编码格式 二 字符串的格式化 三 字符串格式化函数 format 四 Python3 6加入的新格式化方案一f strings 五 格式化符号 六 format的使用方法 七 字符串的特殊字符 一 字符串编码格式 1 什么是
  • bootcmd和bootargs环境变量

    从网络启动 setenv bootargs console tty0 console ttymxc0 115200 root dev mmcblk1p2 rootwait rw setenv bootcmd tftp 80800000 zI
  • cuda c语言编程指南,CUDA C编程权威指南

    译者序 推荐序 自序 作者简介 技术审校者简介 前言 致谢 章基于CUDA的异构并行计算1 1 1并行计算1 1 1 1串行编程和并行编程2 1 1 2并行性3 1 1 3计算机架构4 1 2异构计算6 1 2 1异构架构7 1 2 2异构
  • PSIM联合VS--PLL锁相环

    在学习使用PSIM联合VS的过程中 有一项为采样三相电压信号建立软件锁相环练习PI的使用 在查询资料的过程中 网上的百度百科讲PLL作为产生n倍频来使用 这与我之前做电机控制中的PLL概念不太一致 所以产生了疑问 当时的许多知识 现在回头看
  • JetBrains IntelliJ IDEA Ultimate 2022.1.1 Win/macOS 中文

    下载链接 https sbww work 16343 IntelliJ IDEA安装和设置 IntelliJ IDEA 安装要求 硬件需求 至少需要 2 GB RAM 但是推荐使用 4 GB RAM 至少需要 1 5 GB 硬盘空间 1 G
  • 文件文档在线预览转换解决方案和应用

    文章目录 Java Word转PDF文件方案评测 一 kkFileView应用场景一 官网原始部署与应用 二 kkFileView应用场景二 编译 自定义制作docker镜像部署 三 kkfileview预览pdf文件以及关键词高亮和定位
  • Nacos配置管理

    目录 1 Nacos配置管理 1 1 统一配置管理 1 1 1 在nacos中添加配置文件 1 1 2 从微服务拉取配置 1 2 配置热更新 1 2 1 方式一 1 2 2 方式二 1 3 配置共享 1 添加一个环境共享配置 2 在user
  • 财报解读:份额企稳、均价上浮,小米高端化驶入正轨?

    时隔半个月 在雷军那场颇有反响的以 成长 为主题的个人演讲之后 小米发布了今年二季度财报 二季报中亮眼的财务数据 为雷军的演讲提供了一份更加有力的注解 小米经过三年探索 似乎已经找到了高端化的诀窍 因而实现了 成长 但当高端化转型已经成为市
  • 第一章 计算机系统的概述①

    一 操作系统概述 1 操作系统的概念 什么是操作系统 概念 操作系统 Operating System 0s 是指控制和管理整个计算机系统的硬件和软件资源 并合理地组织调度计算机的工作和资源的分配 以提供给用户和其他软件方便的接口和环境 它
  • 失传已久的广工Dr.com路由器最简单最小白的配置方法

    失传已久的广工路由器最简单最小白的配置方法 零 前言 一 准备工作 1 所需物品 2 原理及工具介绍 没兴趣的请直接跳过 二 路由器权限获取 须时两周 三 分析心跳包 1 安装wireshark 2 进行抓包 四 尝试第一次拨号 1 打开W
  • Xcode 之自己编译静态库

    今天介绍下 如何利用Xcode 新建一个静态库 以及如何编译成i386 armv7 armv7s 等平台架构 开发环境 MAC OS X 10 9 4 Xcode 5 0 2 背景知识 库分两种 静态库 a lib 和 动态库 so dll