如何用Xcode 4.5 编译支持 armv6 CPU及iOS 4.3以前的版本

IOS SDK的架构 IOS SDK综述 前言:   这篇文章除了架构没有太多的东西,但是我一直觉得知道SDK能提供什么东西对IOS的整体架构把握很重要,会少走很多弯路。 一 几点理解 官方关于IOS的文档 https://developer.apple.com/devcenter/ios/index.action 这里要提到的是,Apple的文档是深入理解IOS开发的根源,所以,一定要能够看懂文档。另外, 阅读详情

原来的iPhone,iPhone3G 以及 第一代和第二代的iPod Touch 均只支持 Armv6的CPU指令集。然而,随着iPhone3GS 这款新产品的发布,Apple 开始支持新的指令集 Armv7,iPhone5的所有设备支持Armv7s,且向下兼容。为了保持向下兼容,且支持旧有设备及旧有指令集,Apple支持胖二进制代码(fat binaries)也就是在可执行文件中支持更多的平台架构。


但 是好景不长,随着Xcode 4.5也就是最新版本的Xcode的发布,苹果宣布停止对armv6指令集的支持,强迫开发者放弃iOS 4.2.1及以前的支持Armv6指令集的版本。在我看来,我依然认为支持旧设备企业市场必须比公众市场更长时间,所以放弃4.2.1及以前的版本,并不 是我想要的。经过一段时间摸索,幸运的,我们发现了一些办法,通过简单的修改及配置,我们能够编译armv6指令集的代码。


以下是我们的一些方法,供大家参考:

  • 找到一份旧版本Xcode的拷贝,推荐4.4.1,如果你是 iOS Developer Program的参与者,可以直接从developer.apple.com/ios下载。如果不是,那么还是问一下百度
  • 解压缩Xcode 拷贝出5.1的SDK Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/
  • 下来把拷贝出来的SDK移植进入Xcode 4.5中。例如: Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
  • 用Xcode打开项目,点击项目查看“Build Settings”属性,会出现一个新的选项“Base SDK”:选中 iOS 5.0
  • 还在Build Settings下,找到 Valid Architectures。需要把armv7s 改成armv6
  • 现在我们可以编译armv6了,但是还不能运行在任何armv6的设备上,因为Target不对。我们再点击Info选项,修改Target,例如 iOS 3.0或跟早的版本。你不会在下来菜单中找到3.0了,手填吧

以上就是所有的做法,但这一切并不太完美,例如你不能使用iOS 6的新特性,不能使用armv7s新的指令集等。当然了,如果你的Xcode通过Mac AppStore下载的,升级到新版本后,你还需要再加入一次SDK等等
iOS CPU架构(ARM指令集) 简述 ARM处理器,因其功耗低和尺寸小而闻名,几乎所有的手机处理器都基于ARM,苹果当然也不例外。 armv6、armv7、armv7s、arm64都是ARM处理器的指令集,所有指令集原则上都是向下兼容的。 如iPhone4s的CPU默认指令集为armv7指令集,但它可以同时也兼容armv6的指令集,只是在使用armv6的时候无法充分发挥其性能(无法发挥armv7指令集中得新特性)。 iOS模拟器没有运行ARM指令集,编译运行的是x86指令集(或i386),所以只有在iOS设备上才会执行设备对应ARM指 阅读详情

相关推荐

libpng源码及编译好的库文件

上传的库文件在libpng\lpng1637\projects\vstudio\Debug中,头文件在libpng\lpng1637(使用时需要Include)

xcode5.1生成framework,支持arm64报错

错误如下: ld: Assertion failed: (_machoSection != 0), function machoSection, file /SourceCache/ld64/ld64-236.3/src/ld/ld.hpp, line 714. 解决办法: 在Build Settings 找到 MACH-O ,将Relocatable Object File 改为 St

King的专栏 1534

手把手教你用AppsFlyer SDK实现延迟深度链接(附Android/iOS代码示例)

本文详细介绍了如何使用AppsFlyer SDK实现延迟深度链接,提供Android和iOS双平台代码示例,帮助开发者解决跨平台精准跳转与用户归因问题。通过实战案例和高级场景分析,提升应用的用户转化率和广告投放效果。

sre5engineer的博客 694

微星 b460m 10400f 黑苹果 (mac os11) rx570 (B460M-A PRO) efi

efi: https://gitee.com/sw521/i5-10400f-msi-b460-m-a-pro-rx570-open-core-0.7.2-debug 硬件列表: cpu:i5 10400f 主板:微星 b460m-a-pro 内存:未知2666 8g ddr4 x2 固态:未知m2-sata 256GB x1. , sata 256GB x1 电源:巨龙500W 显示器:T279LG 4k 键盘:未知87键盘 1999标准 鼠标:罗技G102 已知问题: big sur 两条内核错

weixin_43299649的博客 4169

使用 Java + PaddleOCR 实现表格识别,支持导出 HTML 和 Excel(附源码)

使用Java+PaddleOCR快速搭建表格识别系统,无需处理底层模型细节。系统支持表格结构识别和内容识别,可将图片转换为可编辑表格格式。文章提供了完整的实现流程,包括Maven依赖引入、模型下载(包含检测、识别、分类和表格结构模型)及参数配置说明。SmartJavaAI支持多种高性能模型选择,适用于不同应用场景,帮助开发者快速实现表格识别功能。

deng775747758的博客 1473

2024最新超详细无痛安装PyTorch,包括下载地址、环境配置与各种避坑指南

PyTorch更新很快,2024最新下载安装经验贴,包括anaconda+CUDA+cuDNN+PyTorch四部分的下载和安装。文章详细介绍了下载地址、环境配置、虚拟环境建立的问题,还温馨提示了各种闭坑指南。有需要的友友快过来康康!

qq_43596278的博客 11万+

关于iOS开发CPU架构的问题

首先,之所以提到CPU架构的问题,其实是因为我们iOS开发使用的静态库与动态库与之紧密相连。每一个开发的App都要运行在模拟器或者真机上,在编译的时候,Xcode需要去分析当前运行平台的CPU架构,然后确定所使用的静态库是否支持这个CPU架构。如果不支持就会报错。一、什么是CPU架构“CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示。目前市面上

梧雨北辰的博客 2612

Carla自动驾驶仿真一:快速安装与运行Carla

网上有不少的Windows版本的Carla的安装教程,这里简单记录下自己安装过程,写的也比较详细,基本不用看其他文章。

zataji的博客 2万+

lame支持armv6 armv7 i386 armv7s arm64

lame支持armv6 armv7 i386 armv7s

zhu410289616的专栏 8833

Altium Designer 18 将Gerber文件逆向转换成PCB(详细记录)

自己看了网上的教程,弄了很久,估计还有不足的地方,但是先把思路理一理(初学AD) 同时遇到了许多问题: 不是AD导出的Gerber估计不能自动识别层 要自己设置层顺序 要有钻孔文件数据制作NC工具(我也不懂是怎么说,就是size尺寸的) 这里记录一下,以防忘记。 正常顺序: 1.新建CAM 2.导入Gerber,选择CAM文件夹下的所有文件导入 3.设置层属性和物理顺序 4.设置NC工具 5.提取网络表 ...

lb_monkey的博客 1万+

IPC-7351标准实战:如何用LPWizard_10快速生成PCB封装库(附避坑指南)

本文提供了一份详细的IPC-7351标准实战指南,手把手教你使用LPWizard_10软件快速生成符合行业标准的PCB封装库,并直接导入Cadence Allegro。文章深入解读了IPC-7351密度等级的选择逻辑,并重点分享了软件配置、QFN封装生成实战步骤,以及导出失败、焊盘异常等常见问题的避坑解决方案,旨在帮助硬件工程师提升设计效率和可靠性。

weixin_29207439的博客 153

iphone各代cpu架构及xcode对ios sdk版本及cpu架构的支持

原来的iPhone,iPhone3G 以及 第一代和第二代的iPod Touch 均只支持 Armv6的CPU指令集。然而,随着iPhone3GS 这款新产品的发布,Apple 开始支持新的指令集 Armv7,iPhone5的所有设备支持Armv7s,且向下兼容。为了保持向下兼容,且支持旧有设备及旧有指令集,Apple支持胖二进制代码(fat binaries)也就是在可执行文件中支持更多的平

yangtongwang123456的专栏 1493

【深度学习新浪潮】OpenClaw跟机器人行业有哪些很好的研究结合点?

OpenClaw正通过"AI大脑+机器人肢体"的深度融合,重新定义机器人与人类的交互方式和自主操作能力。近期ROSClaw框架发布、人形机器人集成和空间计算试验等进展,标志着OpenClaw已从概念验证阶段进入实际应用落地期,为机器人行业带来了自然语言控制普及化具身智能平民化和跨平台开发标准化三大变革机遇。

专注:太空算力、AI infra、异构调度、大模型成本工程 228

iOS armv7,armv7s, arm64

目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone5 iPhone5C arm64 iPhone5SiPhone6iPhone6+ ===============

指尖◎假如 1万+

【数字IC基础】DFT(Design For Test)可测性设计

【数字IC基础】DFT(Design For Test)可测性设计

努力,加油每一天鸭~ 3463

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

iphone各代cpu架构及xcode对ios sdk版本及cpu架构的支持

原来的iPhone,iPhone3G 以及 第一代和第二代的iPod Touch 均只支持 Armv6的CPU指令集。然而,随着iPhone3GS 这款新产品的发布,Apple 开始支持新的指令集 Armv7,iPhone5的所有设备支持Armv7s,且向下兼容。为了保持向下兼容,且支持旧有设备及旧有指令集,Apple支持胖二进制代码(fat binaries)也就是在可执行文件中支持更多的平

zhaozhy55555的专栏 5056

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Xcode 4.5 支持 amv6

原来的iPhone,iPhone3G 以及 第一代和第二代的iPod Touch 均只支持 Armv6的CPU指令集。然而,随着iPhone3GS 这款新产品的发布,Apple 开始支持新的指令集 Armv7,iPhone5的所有设备支持Armv7s,且向下兼容。为了保持向下兼容,且支持旧有设备及旧有指令集,Apple支持胖二进制代码(fat binaries)也就是在可执行文件中支持更多的平

禚来强(亿刀) 的iphone开发专栏--我们 一群 热爱 移动开发,如果你也是,就加入我们。 2524

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Xcode14 终于放弃了bitcode和armv7架构,还有iOS 9、iOS 10

Xcode14 不再支持 bitcode和armv7架构,还有iOS 9、iOS 10

学习小使者 的专栏 8054

iOS开发:关于armv6、armv7、armv7s的区别

ARM结构处理器,几乎所有的手机都基于ARM,其在嵌入式系统中应用非常广泛。 ARM 处理器因为低功耗和小尺寸而闻名,它的性能在同等功耗的产品中也很出色。这里我们注意一点,模拟器并不运行ARM代码,软件会被编译成x86可以运行的指令。只有在目标设备上,才会执行设备对应的指令集。 armv6、armv7、armv7s是ARM CPU的指令集,一般是向下兼容的。

hmxiao_1983的专栏 978

xcode 中的armv (转)

apple 通用二进制应用程序,含多种处理器或架构的二进制,如x86或x64,arm11或a8  armv7与armv6是指指令或架构的CPU,  armv6是iphone3gs以前arm11 cpu使用的指令集  armv7是iphone3gs及以后、iphone4、ipad,cortex a8 cpu使用的指令集  xcode4.2 IOS5 编译低于sdk4.3的程序的办

xwren362922604的专栏 9989

iOS中的armv6、armv7、armv7s含义详解

Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色。   Armv6、armv7、armv7s、arm64都是arm处理器的指令集,所有指令集原则上都是向下兼容的,如iPhone4S的CPU默认指令集为armv7指令集,但它同时也兼容armv6指令集,只是使用armv6指令集时无法充分发挥其性能,

sky_2016的专栏 1714

iOS中的armv6、armv7、armv7s

armv6、armv7、armv7s是arm CPU的指令集,原则上是向下兼容的,如:iPhone4sCPU支持armv7,但它会兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。iphone5CPU支持armv7s,它也会兼容armv7。 如果引用到第三方的库,以前在iphone4s下编译没有问题,但是换成iphone5之后,提示: Undefined symbols

joosonmao的专栏 5872
上一篇: IOS XMPP的实践
下一篇: Image I/O编程指南
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值