mac/macos上编译electron源码

官方教程:Build Instructions | Electron

准备工作这里不写了,参考官方文档,还有上一篇windows编译electron electron源码下载及编译-CSDN博客

差不多步骤,直接来

网络记得使用魔法

下载编译步骤

      0. 选择目录很重要,请看错误集锦2, 4

  1. mkdir electron_src && cd electron_src
  2. gclient config  --name "src/electron"  --unmanaged  https://github.com/electron/electron@v18.3.5
  3. gclient sync --with_branch_heads --with_tags  失败继续来
  4. cd src
  5. export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
  6. export PATH="/xxx/src/third_party/depot_tools:$PATH"   或者添加到 ~/.bash_profile       source ~/.bash_profile
  7. 编译时需要选择好macos sdk版本,我的电脑xcode版本较高,只能自己另外下载macos sdk版本
  8. gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
  9. ninja -C out/Release electron
  10. ninja -C out/Release electron:electron_dist_zip

就这么简单就下载编译好了,是不是很容易

错误集锦

  1. gclient sync --with_branch_heads --with_tags 过程中EOF错误

[0:02:33] error: 4049 bytes of body are still expected

[0:02:33] fetch-pack: unexpected disconnect while reading sideband packet

[0:02:33] fatal: early EOF

[0:02:33] fatal: fetch-pack: invalid index-pack output

subprocess2.CalledProcessError: Command 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://github.com/nodejs/node.git /Users/electron_src/src/third_party/_gclient_electron_node_nmge4lep' returned non-zero exit status 128 in /Users/electron_src

[0:02:37] _____ Conflicting directory found in /Users/electron_src/src/third_party/electron_node. Moving to /Users/electron_src/_bad_scm/src/third_party/electron_node3_rt8q61.

主要原因是mac笔记本性能差,electron_node这个第三方库下载git缓存不够,导致总是失败,这个说法我也不确定是否准确,有不对的欢迎指正。

解决办法:

  • git config --global core.compression 0  //不确定这个是否有效
  • depot_tools/gclient_utils.py  去掉  -c core.deltaBaseCacheLimit=2g

其他尝试但是失败的方式

  1. -c core.deltaBaseCacheLimit=2g   2g改大改小  都不行

  2. git config --global core.compression 9   //当时还有混合其他配置,反正是失败了    git config --global core.compression -1

  3. ulimit -n unlimited     ulimit -f unlimited

  4. git config --global pack.window

  5. git config --global http.postBuffer 157286400 //这个没有试

  6. git config --global http.lowSpeedLimit 0          git config --global http.lowSpeedTime 999999         单位 秒

  7. git config --global core.packedGitLimit = 512m  2g 8g都不行

  8. git config --global core.packedGitWindowSize = 同上

  9. git config --global pack.packSizeLimit = 同上,设置各种值

  10. git config --global pack.

  11. --depth 1  //这个选项因为是electron集体下载,无法单独设置

2. 下载好的electron源码路径在mac上不太对,导致很多文件没有权限

我下载到/Users/自定义的一个目录/,结果权限各种问题,建议下载到/Users/用户/ 目录下

gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"

解决办法:

sudo chmod -R a+rw src

后面还有其他权限问题,其实,可以最开始   sudo chown -R $(whoami) src

3. 编译阶段报错 ../../third_party/angle/src/common/angle_version_info.cpp:14:5: error: non-void function 'GetANGLERevision' should return a value [-Wreturn-type]

解决方法:

        以下方法修改源码,可以临时不报这个错误,根本解决问题需要选对macos sdk版本

            third_party/angle/src/commit_id.py脚本未知原因,生成的out/Release/gen/angle/angle_commit.h中  #define ANGLE_COMMIT_POSTION xxx这里是空

         python commit_id.py position  实际版本结果为17992  ,先简单直接把angle_commit.h中的  版本改为17992

        类似问题,但是解决方式 ???   CEF Forum • 5790 compilation fails on windows due to ANGLE lib

4. Permission denied : third_party/node/mac/node-darwin-x64/bin/node

解决方法:sudo chmod -R a+rw third_party

5. protobuf error: 'sprintf' is deprecated

解决方法:

 https://github.com/dart-lang/sdk/issues/52407

            gn中添加 --no-deprecated-declarations    protobuf/BUILD.gn    

            或者同步更新代码?

6.macos sdk版本要选择对,因为我的是electron18.3.5 所以最后选择的是macos sdk 11.3 ,不然很多莫名编译错误

解决方法:

下载对应的macos sdk,然后制定electron编译时使用

添加对Mac OS X 11.3的SDK的支持

在src/electron/build/args/all.gn中添加mac_sdk_path = "$path_to_MacOSX11.3_sdk_folder"

SDK可以在https://github.com/phracker/MacOSX-SDKs/tree/master/MacOSX10.14.sdk此处下载

趟坑过程

最开始使用xcode默认的sdk编译,我的xcode已经是12.x了,然后报错,

third_party/dawn/src/dawn/native/metal/DeviceMTL.h:146  error: unknown type name 'MTLTimestamp'; did you mean 'CVTimestamp'?

查看文章

https://www.cnblogs.com/bloglearning/p/12951559.html,建议使用mac sdk10.14

选择的mac sdk 10.14, 还是错误的,使用mac sdk 10.15也是错误

切换10.14和10.15,也遇到问题,最开始使用的10.14.  gn生成out/Release以后,切换了10.15,此时没有清空out/Release, gn直接生成,结果好多个错误,解决不了,最后查到mac_sdk_min就是10.15,然后清空out/Release,gn生成,再编译就没有莫名错误了,包括楼上3的那个错误,但是又有了新的错误unknown type name 'MTLTimestamp'; did you mean 'CVTimestamp'?

https://www.cnblogs.com/bloglearning/p/12951559.html

https://www.ccppcoding.com/archives/350648

然后使用以下步骤查看这个electron源码要求的mac_sdk_min

$ gn args out/Release --list --short|grep sdk

    cros_sdk_version = ""

    mac_sdk_min = "10.15"

    mac_sdk_name = "macosx"

    mac_sdk_official_version = "12.1"  //此项的意思,应该是当时使用的官方的sdk 12.1

    mac_sdk_path = "/User/用户名/project/MacOSX10.15.sdk" // 自己设置的

查到的结果,既然要求mac_sdk_min是10.15,那为啥还报错MTLTimestamp未定义呢,搞不懂

mac_sdk_official_version既然写了12.1,https://github.com/phracker/MacOSX-SDKs/tree/master/MacOSX10.14.sdk  这个地址又只能下载到最大11.3的版本,那么使用11.3试一下吧

all.gn中mac_sdk_path改为新下载的11.3,清空,out目录,从小gn ,编译,完美,不报错了,直接编译过了,编译过程耗时1天

黄牛拉车,太慢了,笔记本性能不足啊

总结:这个错误  third_party/dawn/src/dawn/native/metal/DeviceMTL.h:146  error: unknown type name 'MTLTimestamp'; did you mean 'CVTimestamp'?

解决方法:

MTLTimestamp定义在macos sdk中的 metal.framework中,但是下载的10.15中,metal.framework中根本没有MTLTimestamp的定义

重新下载11.3才找到MTLTimestamp的定义,要求的mac_sdk_min = "10.15"根本就是错误的

https://github.com/phracker/MacOSX-SDKs/tree/master/MacOSX11.3.sdk

7. permission denied:  third_party/node/mac/node-darwin-x64/bin/node

sudo chown -R $(whoami) third_party

如果还不行  则需要chmod -R a+rw  ..xxx/xxx/node       chmod a+rwx  ..xxx/xxx/node

后面还有其他权限问题,其实,可以最开始可以   sudo chown -R $(whoami) src

做rtc开发,可以选择百家云brtc sdk

百家云brtc sdk支持全平台,当然也支持electron, electron sdk中的webrtc已经针对性地做了优化,有兴趣的可以查看百家云brtc sdk

百家云-开发文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/351059.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

02 Redis之配置文件

3. Redis配置文件 3.1 网络部分 首先明确,tcp-backlogestablished Linux 内核 2.2 版本之后(现在大部分都是3.x了) TCP 系统中维护了两个队列, 用来存放TCP连接 a. SYN_RECEIVED 队列中存放未完成三次握手的连接 b. ESTABLISHED队列中存放已…

算力、应用、方案,联想布局全栈AI,以自身制造与供应链范本助力千行百业智能化转型升级

1月23日-24日,联想集团举办主题为“算领AI时代 筑基智能变革”的擎智媒体沙龙和新IT思享会“走进联想”活动。在活动中,联想集团副总裁、中国区首席市场官王传东表示,今年是联想成立40周年,联想已构建了全栈智能布局,将…

派网AX50C做多宽带路由和核心交换机配置实战教程

接近300办公人员的工厂需要网络升级,我规划设计和部署实施了以下方案,同样是简约不简单,在满足性能需求稳定性的前提下,既有经济性,又有安全性。 派网做路由器,刚好开启默认防病毒策略,省下来一…

携程开源 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX

携程开源 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX 官网文档 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX 这篇文章稍稍水一下,主要讲下部署过程里踩的坑,因为部署的过程主要是运维同学去处理了,我…

力扣每日一题 ---- 1039. 多边形三角剖分的最低得分

这题的难点在哪部分呢,其实是怎么思考。这道题如果之前没做过类似的话,还是很难看出一些性质的,这题原本的话是没有图片把用例显示的这么详细的。这题中有个很隐晦的点没有说出来 剖出来的三角形是否有交叉,这题中如果加一个三角…

【HarmonyOS应用开发】TypeScript快速入门(二)

内容比较长,干货满满,全是实战操作内容,希望耐心观看,如果对你有所帮助,请点个赞! ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS)的基础上,匹配ArkUI…

力扣hot100 课程表 拓扑序列

Problem: 207. 课程表 文章目录 思路复杂度Code 思路 👨‍🏫 三叶题解 复杂度 时间复杂度: O ( n m ) O(nm) O(nm) 空间复杂度: O ( n m ) O(nm) O(nm) Code class Solution{int N 100010, M 5010, idx;int[] in new int[N];// in[i] 表示节…

第六篇【传奇开心果系列】Python的OpenCV库技术点案例示例:摄像头标定

传奇开心果博文系列 系列博文目录Python的OpenCV库技术点案例示例系列 博文目录一、前言二、OpenCV摄像头标定介绍三、摄像头内外参数标定示例代码和扩展四、立体视觉标定示例代码和扩展五、归纳总结 系列博文目录 Python的OpenCV库技术点案例示例系列 博文目录 一、前言 O…

一种通过增强的面部边界实现精确面部表示的多级人脸超分辨率

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读:一种通过增强的面部边界实现精确面部表示的多级人脸超分辨率二、使用步骤1、研究背景2、方法提出3、相关方法3.1、FSR网络结构3.2…

【微信小程序】常用的几种轮播图

轮播效果一 wxml: <view classpageBox pageOne><view classlist><swiper indicator-dots"{{true}}" autoplay"{{false}}" previous-margin"{{140rpx}}" next-margin"{{140rpx}}" bindchange"swiperChange"&…

AI编译器的后端优化策略

背景 工作领域是AI芯片工具链相关&#xff0c;很多相关知识的概念都是跟着项目成长建立起来&#xff0c;但是比较整个技术体系在脑海中都不太系统&#xff0c;比如项目参与中涉及到了很多AI编译器开发相关内容&#xff0c;东西比较零碎&#xff0c;工作中也没有太多时间去做复盘…

算子:详细篇

目录 一、执行环境 1.1 创建执行环境 1.2 执行模式 二、源算子 2.1 从集合中读取数据 2.2 从文件读取数据 2.3 从socket读取数据 2.4 从kafka读取数据 三、转换算子 3.1 基本转换算子 &#xff08;1&#xff09;映射(map) &#xff08;2&#xff09;过滤(filter) &#xff08…

网络分层和网络原理之UDP和TCP

温故而知新 目录 网络分层 应用层 http协议 传输层 介绍 UDP协议 TCP协议 网络层 数据链路层 物理层 网络分层 一. 应用层 应用程序 现成的应用层协议有超文本协议http(不仅仅有文本&#xff09;. http协议 http://t.csdnimg.cn/e0e8khttp://t.csdnimg.cn/e0e8k 自定义应…

云手机哪一款好用?

随着海外市场的不断发展&#xff0c;云手机市场也呈现蓬勃的态势&#xff0c;众多云设备软件纷纷涌现。企业在选择云手机软件时&#xff0c;如何找到性能卓越的软件成为一项关键任务。在众多选择中&#xff0c;OgPhone云手机凭借其卓越的性能和独特功能脱颖而出。以下是OgPhone…

音频格式之AAC:(3)AAC编解码原理详解

系列文章目录 音频格式的介绍文章系列&#xff1a; 音频编解码格式介绍(1) ADPCM&#xff1a;adpcm编解码原理及其代码实现 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#xff1a;(1)MP3封装格式简介 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#x…

一文详解C++拷贝构造函数

文章目录 引入一、什么是拷贝构造函数&#xff1f;二、什么情况下使用拷贝构造函数&#xff1f;三、使用拷贝构造函数需要注意什么&#xff1f;四、深拷贝和浅拷贝浅拷贝深拷贝 引入 在现实生活中&#xff0c;可能存在一个与你一样的自己&#xff0c;我们称其为双胞胎。 相当…

5|领域建模实践(上):怎样既准确又深刻地理解业务知识?

上节课咱们完成了事件风暴&#xff0c;梳理了系统的行为需求。但你可能也发现了&#xff0c;其实还有些微妙的业务概念还没有澄清&#xff0c;这就要靠领域建模来完成了。 建立领域模型是 DDD 的核心。要建好领域建模&#xff0c;需要理论和实践相结合。由于我们的模型有一定的…

CSC签证费报销的相关规定及要求-主要国家签证费报销凭据

国家留学基金委&#xff08;CSC&#xff09;派出流程很多是在留学服务机构办理&#xff0c;即北京教育部留学服务中心及教育部出国人员上海集训部&#xff0c;其中含签证费报销。本篇知识人网小编以上海集训部为例&#xff0c;详细解读一下签证费报销的相关规定及要求&#xff…

sql 行转列 日周月 图表统计

目录 目录 需求 准备 月 分析 按月分组 行转列 错误版本 正确版本 日 分析 行转列 周 分析 按周分组 行转列 本年 需求 页面有三个按钮 日周月&#xff0c;统计一周中每天(日)&#xff0c;一月中每周(周)&#xff0c;一年中每月(月)&#xff0c;设备台数 点…

Linux中断 -- 中断路由、优先级、数据和标识

目录 1.中断路由 2.中断优先级 3.中断平衡 4.Linux内核中重要的数据结构 5.中断标识 承前文&#xff0c;本文从中断路由、优先级、数据结构和标识意义等方面对Linux内核中断进行一步的解析。 1.中断路由 Aset affinity flow GIC文中有提到SPI类型中断的路由控制器寄存器为…