‘壹’ Mac m1的交叉编译
最近刚从window转到Mac系统,用Mac交叉编译window程序时遇到一点问题。
Mac(编译)系统
Window(编译)系统
‘贰’ Mac M1安装php开发环境
去年年底,苹果推出了新款的M1芯片的mac,最近刚好要换电脑,考虑对比再三,还是选择了M1芯片的mac;刚拿到手以后,担心会有软件不兼容啥的,网上也推荐作为主力开发的笔记本的话,不推荐M1,但是现在已经完全配置好了开发环境,安全下车了。下面就来简单介绍下安装过程中的步骤:
注意:如果没有安装brew,需要先安装brew,使用arch -arm64 brew install安装
首先搜索是否包含想要安装的mysql版本,如下图:
此处选择[email protected]这个版本,我本地已经安装完成了
安装完成后,需要添加环境变量,这样才能在任何目录下面直接打mysql访问
先查询有哪些php的版本,之前看网上说的M1,目前还不支持php7.3以下的版本,所有我安装了php7.4
等待安装完成后,可以开始部署项目了,由于我的项目是thinkphp框架开发的,而且用到了redis,所以,这边需要先安装redis依赖
安装php redis依赖(此处使用pecl安装,网上有很多使用编译安装的方法,那种方法比较麻烦,而且需要配置的地方比较多,pecl安装的话,快捷方便)
这个安装完成后,就只需要去nginx目录下面配置项目文件就OK了。
其他的不多说,主要提一点,就是thinkphp框架,重定向那边的配置,location里面的配置需要修改下,如下图:
修改完成后,重启服务器,还要重启php-fpm,这个是关键
‘叁’ Mac M1 monterey 搭建 php环境(不使用XAMPP)
转:
https://getgrav.org/blog/macos-monterey-apache-multiple-php-versions
‘肆’ 在php5的类的定义中,如果方法m1能够调用方法m2,但m2不能调用m1,那么m1和m2应该符
关键词private public 一个是私有方法一个是公共方法
‘伍’ M1芯片Mac搭建前端开发环境
M1芯片出来了有一段时间了,各类软件的兼容性已经跟进的差不多了,迫于 M1 实在太香,我的 M1 Macbook 也于本周到达了我的手上。在花费了两三个小时搭建完开发环境后,立马用它开始干活了。这几天的感受只有寥寥一语可以概括:太 TM 香了!太强了
作为一个前端开发者,我可以负责任的说前端开发的场景 M1 已经可以完全覆盖,并且体验非常好。目前我依赖的开发环境,并且已经跑在 M1 Mac 上的如下:适配 m1 的 Vscode Insiders 版本 + Node v15(on arm) + Node v14 (on intel) + Nvm + Cocoapods + Xcode + Flutter。可以看到,大前端这一套是完全能够覆盖的。
我在 github 的 issue 中经常看到有关于 m1 安装环境的问题,为了帮助不愿意翻 issue 的开发者,遂决定写下这篇文章记录前端环境的搭建问题。
我会从以下几个步骤来记录:
Xcode 是苹果开发者工具,是一个功能非常强大的 IDE,可以用来开发苹果应用,并且自带了 git 环境, 并且有咱们后续依赖的 Xcode Command line tool , 先进入 app store 中安装 Xcode。安装好之后再进入后续步骤
如果你是一个 mac 老用户,那自然不用我介绍什么是 Homebrew 。若是你是一个新用户,那么请你一定要安装 Homebrew ,并使用它来管理 Mac 中的各类环境依赖。通过👇的命令即可安装 Homebrew
在终端中执行如下命令安装 Homebrew,安装 Homebrew 的时候,常常会因为网络问题导致安装失败,这个问题只能依赖大家自行解决科学上网了。
Nvm 是一个管理 Node 版本的工具,当项目多了以后,总会碰到需要切换 Node 环境的时候,所以推荐大家使用 Nvm 来安装 Node。
若是你已经按上述步骤安装好了 Homebrew,那么你可以直接通过 Homebrew 的命令轻松安装 Nvm
若是你不想使用 Homebrew 管理依赖,那么用 👇 的 curl 直接安装 Nvm 也是可以的
安装好 nvm 后,需要将环境变量写入我们的 shell 配置文件中。
如果你的默认 shell 的 zsh,那么将环境变量命令复制进 .zshrc :
如果不使用 zsh,那么将环境变量复制进 bash 中,通过如下命令创建 bash_profile,并且编辑 bash_profile。
最后将以下环境变量脚本 进 shell 配置文件中:
至此 Nvm 已经安装好,可以尝试在命令行中输入 nvm,你可以看到 nvm 已经正常工作了。
接下来我们通过 nvm 来安装 Node,我们先安装适配了 M1 的 node 版本。
该命令运行完后,会执行很久,编译 node ,大家耐心等就好了,大概需要 5-10 分钟,就会提示安装成功。再提醒一句,报任何错误,首先先检查是不是网络问题,例如 443 、 connect timeout 等,如果是网络问题,建议科学上网。
安装 Node 的部分写的很简单,因为按这个步骤,一般不会出问题。而当你用 nvm 尝试去安装 v14 及以下的 Node 版本时,大概率会报错,而我们在工作中恰恰又可能依赖 v14 及以下的 lts 版本。那么为什么会报错呢?究其原因还是因为低版本的 node 并不是基于 arm64 架构的,所以不适配 M1 芯片。在这里教大家两个方法,就能成功安装上低版本 Node。
在终端中,输入:
通过这个命令可以让 shell 运行在Rosetta2下。
之后你可以通过 nvm install v12 来安装低版本 Node。
在此之后,您可以不用在 Rosetta2 中就可以使用安装的可执行文件,也就是说,您可以将 Node v15与其他节点版本互换使用。
方法二就是通过 Rosetta2 来启动终端,这样通过 Rosetta2 转译到 x86 架构中执行安装,也一样可以安装成功。
至此,我们的 M1 就已经完成了 git + 各版本 Node + npm 的搭建,完成这部分工作后,前端项目已经可以正常运行,各位买了 M1 Mac 的前端小伙伴又能愉快的干活了。希望本文能够帮助被 M1 的开发环境困扰过的您。
‘陆’ M1 设备的 Xcode 编译问题深究
在Apple发布M1芯片之前,一直使用Intel的芯片,没有出现什么问题。发布M1芯片后,由于两者架构的不同(M1是arm64架构,Intel是x86_64的架构),导致很多软件运行出现了问题。我们在M1机型中使用Xcode编译模拟器时,可能会碰到如下报错:
或
这些报错,都是是由于项目中存在.a或.framework静态库导致的。以前,我们创建静态库时,会分别打包出一份针对真机(arm64)和模拟器的(x86_64),然后将这两份合并成一个包后引入项目中进行使用。在Intel机型上,真机上使用arm64指令,模拟器(x86_64)中使用x86_64指令,所以不存在问题。但是在M1机型上,模拟器是以arm64运行的,显然再以x86_64运行就会出现问题。
对于这类架构报错问题,网上的资料一般会告诉你两个解决方案:
以Rosetta模式运行Xcode。
修改Build Settings -> Excluded Architectures选项,添加Any iOS Simulator SDK选项,并设置值为arm64。图示如下:
这两种方案都能解决编译问题,但是也都存在问题。
以Rosetta模式运行是M1机器上x86软件无法运行的解决方案,它会将x86指令转译成ARM指令运行,这种转译显然是存在性能损耗的,损耗大概在20%~30%,不到万不得已,不推荐使用这种方案。
Excluded Architectures方案说明
修改Excluded Architectures选项也有它的问题。字面意思是排除架构的意思,我们设置在模拟器中排除arm64就能解决模拟器无法编译arm64的问题。
这样的设置能生效会让人有点费解,我们知道,在intel机型上,模拟器本来就是以x86方式运行的,排除arm64毫无影响。但是在M1机型上,模拟器是以arm64方式运行的,排除了arm64反而能跑,这不是把我的智商摁在地上摩擦么?,但是苹果就是这样干的,当在M1机型上,排除了模拟器的arm64架构后,模拟器还是会以arm64的方式运行,但是模拟器中的app是以x86的方式运行的,对苹果的这个骚操作我们不得不服。图示如下:
有时候在Excluded Architectures选项中排除了模拟器的arm64指令,依然无法编译通过,那么一般是项目设置和cocoapods的设置不一致导致,设置为一致后一般可以解决问题。可以通过在Podfile中添加如下内容来解决:
通过上述内容,我们知道了问题的由来,它是由于项目中存在.a或.framework,它们提供的指令集不完整导致的。Apple对于这类问题,也提供了解决方案,请由我细细道来。
以Xcode13为例,在我们创建静态库时,选择真机编译出来的包只包含arm64指令,选择模拟器编译出来的会同时包含arm64和x86_64指令。我看一些网上的教程,教别人将模拟器部分的arm64移除,其实大可不必。因为要支持M1机器正常跑模拟器,模拟器必须同时包含arm64和x86_64指令。
2019年的WWDC,apple提供了一种新的框架封装格式XCFramework。简单理解就是以前使用lipo合并不同指令集的包,现在则使用新的指令合并成XCFramework格式
打包成framework,格式如下:
打包成XCFramework后,格式如下:
从上述可以看出,XCFramework就是把两个不同指令集的framework放入了同一个文件夹(.xcframework),并生成了一个配置文件Info.plist。这样生成的XCFramework就可以完美的解决M1机器无法编译模拟器的问题。
XCFramework的创建指令也很简单:
以现在的情况,很多第三方框架,并没有使用XCFramework,而项目中只要有一个框架没有支持模拟器的arm64指令,那么在M1机器上,模拟器只能以Rosetta模式运行应用,对这一块的普遍支持估计要等M1普及以后了。
苹果换芯,成了开发者们的噩梦?
armv6、armv7、armv7s、armv8、armv64及其i386、x86_64区别
细说iOS静态库和动态库
关于Xcode11的XCFrameworks框架
‘柒’ m1芯片支持python第三方库吗
m1芯片是支持python第三方库但是可以不能完美运行。
M1芯片是ARM架构,R语言、SQL、Python等使用非常广泛的语言是支持的,不过有可能需要自己进行编译安装,或者是调试;但是第三方库就不一定能够完美支持M1芯片了。
M1芯片毕竟是苹果第一代产品,是一个试水之作,肯定有很多的缺陷,还有需要改进的地方,这也是苹果保留了intel产品的原因。目前涉及专业的领域,一律仍然推荐x86架构,稳定可用是第一要务。
Apple正式发布的M1芯片,它是Apple全新打造的强大芯片,也是第一款专为 Mac 设计的芯片。M1芯片专门针对Mac系统在小尺寸和高能效上的严格要求而优化。
作为一款SoC芯片,M1将众多强大技术集于一身,并且采用统一内存架构,为性能和能效带来巨大的提升。
M1也是Apple首款采用先进5纳米制程打造的个人电脑芯片,封装了惊人的160亿个晶体管,其数量为Apple所有芯片之最。
这款低能耗芯片搭载了我们最快的中央处理器核心,拥有卓越的中央处理器性能功耗比;配备了我们最快的个人电脑集成显卡。
它的Apple神经网络引擎更带来了突破性的机器学习性能。得益于此,M1芯片将中央处理器速度提升至最高3.5倍,将图形处理器速度提升至最高6倍,将机器学习的速度提升至最高15倍。
而且在实现这一切的同时,还将电池续航时间最高提升至上一代 Mac 机型的2倍。这些性能和能效上的跃升,意味着M1芯片将Mac带入一个全新纪元。
‘捌’ M1芯片打通藩篱,苹果助推ARM胜利
文 罗宁
编 王一粟
又是一场被精准预测的苹果春晚。
4月21日凌晨,原本要在三月举办的苹果春季发布会姗姗来迟,虽说让很多果粉等到花都谢了,但还是有不少让人眼前一亮的新东西。
除了iPhone 12和Apple TV算是常规升级外,AirTag暗藏苹果的小目标, 而其中最为关键的,就是搭载M1芯片的iMac和同样配备M1芯片的iPad Pro都有了巨大变化 ,在甩开英特尔推出ARM架构自研芯片M1之后,苹果M1芯片的产品线大家族一步步揭开了自己的神秘面纱,继续吹响革命的号角。
苹果的野心显露无疑,从芯片到操作系统,再到生态圈,正在引领PC与移动生态实现大融合与大统一。
近几年在华为、三星的手机和平板协同上也同样有这样的趋势,Wintel联盟进一步瓦解,ARM生态正在进一步扩张。
还记得那句iPad Pro宣传语吗? “你的下一台电脑,何必是电脑。” 从昨晚发布会看,或许这次发布的iPad Pro才真正配得上这句话,原因无它,就在于iPad Pro从A系列芯片一跃升级到了M1芯片。
基于M1芯片的iPad Pro相比上一代CPU性能提升50%,GPU性能提升40%,尽管外观没有多大变化,但芯片的升级再一次将iPad Pro推向了最强平板电脑的宝座,也许应了那句老话,性能能够打败iPad Pro的只有下一代iPad Pro。
相比A系列芯片,M1芯片也为iPad OS与macOS的融合做好了准备。基于相同芯片架构,平板形态的iPad Pro和笔记本形态的MacBook Pro将会在应用生态上做到统一,也意味着 整个iOS生态的开发者可以更方便开发出跨平台的应用内容 , 不再需要为同一款应用设计基于X86和ARM架构的不同版本,完成了iPad Pro从过去的平板电脑向个人电脑的底层基础变化。 现在说iPad Pro完全取代电脑或许还不太可能,但随着越来越多应用将可以在iPad Pro上流畅运行,必将引起新一轮生态的变革。
这一动作其实是“一石二鸟”。一方面,iPad OS与macOS可以在更多交互上走向统一,使苹果庞大的iOS生态惠及笔记本产品线;另一方面,也让开发者拥有更方便的开发环境,持续壮大苹果的应用生态优势。
这个数字已经达到了此前苹果推出的售价高达四万元的Pro Display XDR显示屏的效果,而这一次,苹果把这项技术压缩到了iPad Pro这块12.9英寸、6.4毫米的机身中,带来了目前所有移动设备中最强悍的屏幕表现,这也是在为更多专业人士加入苹果移动生态做好准备。
苹果还为iPad Pro增加了雷雳端口,按照官方说法,iPad Pro不仅能兼容现有的USB-C接口,还能直接连接Pro Display XDR显示屏跑满6K分辨率,苹果用这样一种看似很自然的方式, 完成了iPad屏幕和Pro Display XDR屏幕的高度统一,这意味着过去一些需要庞大的Mac Pro能做到的事情,新的iPad Pro也能做到,用户在所有苹果设备上的体验进一步达成统一。
除了M1芯片和mini-LED屏幕之外,苹果还为iPad Pro加入了5G网络功能,5G网络的加入,不但实现了iPad Pro移动办公的需要,也让iPad Pro相比MacBook来说具有更多扩展性,比如直接通过iPad Pro进行网络直播,或者随时随地高速上网进行 游戏 和视频会议,这一特性也方便用户有针对性选择苹果设备。
所以,融合M1芯片,mini-LED显示技术以及5G网络的iPad Pro不但为苹果凝聚了更多开发者,吸引到需求更高的专业人士,也将iPad、Mac、iPhone之间的隔阂逐渐打通,也因此,苹果还在昨晚带来了全新的iMac电脑。
作为发布会上的重磅产品,从内到外重新构建的iMac不但成为苹果改变桌面生态的又一重要武器,也承载了苹果破旧立新,融合生态圈的野心。
去年推出M1芯片的MacBook Air、MacBook Pro以及Mac mini尽管外观与前代产品毫无变化,但苹果却通过强悍性能以及超长续航,让人们看到了M1芯片的无穷潜力,基于ARM架构开发的M1芯片无疑让英特尔感受到了压力。而苹果也再接再厉,将这颗M1芯片用在了台式机iMac上,这一次给人带来的是全新的惊喜。
基于M1芯片打造的iMac实现了过去从来不曾做到的轻薄,整体厚度均匀,只有11.5毫米,这样的外观看起来就像是一个巨大的iPad配上电脑支架,整体重量不到4.5kg,相比上一代iMac 5.48kg的重量直接减轻1kg,而且要注意到的是,这款24英寸的iMac,实际上是之前21.5英寸iMac升级版,重量降低的同时屏幕增大,使得体验更进一步升级。
这种从设计上将iPad形态融合到电脑形态的思考显然是苹果有意为之。 当处理器都采用统一架构时,人们在不同苹果设备上的交互必然更加统一, 而iMac在外观上和iPad Pro边界不再那么明显,让人们使用时更加轻松自如,近几年在华为、三星的手机和平板协同上也同样有这样的趋势,但苹果显然是走的最快的一家。
搭载M1芯片的iMac电脑相比之前标配的21.5英寸iMac机型,其中央处理器速度提升85%,图形处理速度提升2倍,无论是对于代码编译还是视频编辑而言,处理运行起来都表现得更加出色,这一点早在去年M1版本的MacBook Air上就有所体现。
另一方面, 作为一款M1芯片的一体机,苹果也将系统生态和英特尔时代做了切割,形成泾渭分明的两条路。 在macOS Big Sur系统加持下,你不但可以使用系统转译过去的X86架构应用,更能运行各种iPhone以及iPad应用,尽管没有触摸屏支持,但 苹果实际上早在iPad OS上就通过触控板为这些应用打通了交互 ,过去iPhone、iMac、iPad之间的那堵墙正在慢慢消失。
ARM才是未来 ,基于M1芯片的iMac的变化可以说是全方位的,外观上向iPad Pro靠拢,系统使用上也逐渐打通iOS生态。苹果走出这一步的同时,其软硬件生态的融合性进一步增强,从某种程度上说,iMac就是一个放在家里的超大号的iPad Pro, iPad Pro就像是小型的iMac,不再有X86架构和ARM架构的区别,这样当用户选购苹果产品时,只需要针对自己的使用场景就能做出选择,而不再纠结于生态的区别。
智能手机和个人电脑的融合在近年来不断加深,传统的PC逐渐被改造,华为、三星、小米等厂商都通过自家手机和笔记本电脑打通了Windows系统与安卓系统的界限,而苹果则一路狂奔,让iOS、iPad OS、macOS从底层架构到应用生态上逐渐统一,其转变之快,让不少开发者十分看好。
前英特尔总裁雷尼·詹姆斯创业做新公司Ampere时就曾公开表示,Apple M1是ARM在客户领域的“分水岭”,数据中心将不可避免地转向ARM。该公司高级副总裁Jeff Wittich提到,苹果公司的M1将会吸引更多的人,并将开发人员从x86转移到Arm。
不过凡事都有两面性,在一些iOS开发者欢欣雀跃的同时,也有人对于M1芯片架构的统一不那么高兴。 由于M1芯片高度一体,使其开放特性进一步降低,Linux之父Linus Torvlds就谈到Linux难以运行在苹果M1芯片的笔记本上,因为苹果的封闭策略,开源软件开发者将没有足够的资源在Mac上开发Linux支持的驱动和操作系统。
这实际上给了其他ARM架构芯片以机会,也是Windows系统PC依旧不会被取代的原因。苹果的封闭策略固然能够吸引更多消费者加入,但基于Linux开发者的生态社区依旧十分强大且有生命力,Linux开源社区依然是这个世界持续向前的核心推动力之一,对于这些用户而言,他们也许并不喜欢M1芯片的设备。
华为消费者业务CMO朱勇刚此前也对苹果围绕ARM架构展开的战略也表示认同,并提到华为战略和苹果战略是完全一样的,尽管PC领域华为依然使用英特尔芯片,但基于ARM架构的华为麒麟系列芯片已覆盖到手机、平板、电视等设备上,并计划通过鸿蒙系统底层架构实现生态的进一步统一。截止2020年底,鸿蒙系统全球开发者超过180万,预计今年年底将在华为手机上大范围使用, 这也是ARM进一步赶超英特尔的契机。
伴随M1芯片大家族产品的不断亮相,苹果打破PC和移动设备边界的野心显露无疑。这样一步棋苹果走了足足十年。从A系列芯片到M1芯片,苹果打破了老旧的英特尔设下的结界,让iPhone、iPad、iMac变成了可以相互支持的工具,似乎再没有哪一家公司能如此成熟的完成这样的转变。
以此为突破口,苹果也终于完成了从内到外的自主话语权,摆脱英特尔的芯片桎梏,苹果将有机会设计出更符合自己思路的产品。这一点我们在本次全新iMac上就能看出,而苹果每一次发布会上都会提到的AR、AI技术等应用场景,在愈发强大的M系列芯片之下都更加游刃有余。
这不仅是苹果的胜利,也是ARM的胜利,因为苹果、华为的推动,ARM阵营将会进一步壮大。此前微软推出ARM架构Surface电脑时成绩并不理想,但当苹果作为变革者推动这一进程之后,微软也许有机会借这股东风再次尝试吸引开发者,华为鸿蒙系统或许也能从中受益。
接下来该期待的,就是六月的围绕软件和系统的苹果开发者大会。