mac/macos上编译electron源码

news2024/9/29 17:27:04

官方教程: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.coloradmin.cn/o/1413911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Emergent Abilities of Large Language Models 机翻mark

摘要 证明通过扩大语言模型可以可靠地提高性能和样本效率在广泛的下游任务。相反,本文讨论了我们称之为大型语言模型的新兴能力的一种不可预测的现象。我们认为如果一个能力不存在于较小的模型中,但在较大的模型中存在,则该能力就是新兴的。…

InforSuiteAS中创中间件windows环境部署

版本:InforSuiteAS_StE_V10.0.5.2.1 环境要求:Java环境 DK1.8版本, 内存2GB或以上 , 硬盘空间 10GB或以上, 监视器 图形界面安装需要256色以上,字符界面安装没有色彩要求 ,浏览器 Microsoft …

el-tree基础的树形节点设置节点不能选中高亮出来,对已经选中的节点设置disabled,对当前节点刚选中后设置禁用disabled

一、 el-tree基础的树形节点设置节点不能选中高亮出来 需求 我们使用element-ui或者element-plus的时候会遇到树形控件的使用,我们使用树形控件会限制有的节点不让选中和高亮出来,这个时候需要我们做限制。在实现中我们发现了element-ui和element-plus…

SQL注入实战:绕过操作

一:绕过操作 1、常用绕过方式 大小写绕过: 通过修改关键字内字母大小写来绕过过滤措施。例如:AnD11Select* from ** oRdEr by 1 双写绕过: 使用双写绕过。因为在过滤过程中只进行了一次替换。就是将关键字替换为对应的空。 比如 union在…

使用Opencv-python库读取图像、本地视频和摄像头实时数据

使用Opencv-python库读取图像、本地视频和摄像头实时数据 Python中使用OpenCV读取图像、本地视频和摄像头数据很简单, 首先需要安装Python,然后安装Opencv-python库 pip install opencv-python然后在PyCharm或者VScode等IDE中输入对应的Python代码 一…

VS执行程序的时候运行上一次的程序。

这个问题我找了很久,最后自己随便按一下,成功了,分享给大家: 上面的代码是我测试的时候用的,随便写个c或者c代码就行,因为这个时候,我的代码已经更改了,它依然执行上一次的程序。我…

2024.1.27每日一题

LeetCode 最大合金数 2861. 最大合金数 - 力扣(LeetCode) 题目描述 假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用,并且你可以使用 k 台机器来制造合金。每台机器都需…

【项目日记(五)】第二层: 中心缓存的具体实现(上)

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:项目日记-高并发内存池⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你做项目   🔝🔝 开发环境: Visual Studio 2022 项目日…

sqli-lbs靶场搭建

目录 环境小皮源码下载 1.源码解压: 2.搭建网站 2.1点击创建网站 2.2修改sql-connections\db-creds.inc 2.3重新启动 3.访问你设置的域名 3.1点击启动数据库配置 3.2返回第一个页面(开启题目) sqlilbs靶场搭建 环境小皮源码下载 下载地址&am…

AWTK 开源串口屏开发(8) - 系统设置

AWTK 开源串口屏开发 - 系统设置 系统设置只是一个普通应用程序,不过它会用 默认模型 中一些内置的属性和命令,所以这里专门来介绍一下。 1. 功能 在这个例子会用到 默认模型 中一些下列内置的属性和命令: 内置属性 属性类型说明rtc_yea…

x-cmd pkg | httpx - 为 Python 设计的下一代 HTTP 客户端库

目录 简介首次用户功能特点进一步探索 简介 HTTPX 是一个为 Python 设计的下一代 HTTP 客户端库,由 Tom Christie 创建。它提供了同步和异步的 API,并支持 HTTP/1.1 和 HTTP/2 协议。与 Requests 库类似,但增加了对异步请求的支持和 HTTP/2 …

8通液体水位检测IC/液位检测芯片/抗干扰水位检测VK36W8I SOP16/QFN16L FAE支持

产品型号:VK36W8I 产品品牌:永嘉微电/VINKA 封装形式:SOP16/QFN16L 工程服务,技术支持! 概述 VK36W8I具有8个触摸检测通道,可用来检测8个点的水位。该芯片具有较高的集成度,仅需极少的外部组…

【汇总】解决Spring-Web与Spring-WebFlux冲突

【汇总】解决Spring-Web与Spring-WebFlux冲突 问题发现问题解决问题一:The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],问题二:The Java/XML…

Cesium渲染白膜数据

async DrawBaiMoFun2() {// tiles 矩阵变换let changePostion = (tileSet, tx, ty, tz, rx, ry, rz, scale, center) => {if (!center) return;const m = Cesium.Transforms.eastNorthUpToFixedFrame(center);const surface =center ||Cesium.Cartesian3.fromRadians(cartog…

.NET中的matplotlib平替,ScottPlot简单使用

文章目录 前言解决方案Python调用.NET 原生解决 ScottPlot找到文章ScottPlot Nuget安装简单代码测试代码跑不了5.0新版本测试 总结 前言 我之前在学OpenCV 三语言开发的时候,遇到了一个问题,怎么可视化的显示数据。Python有matplotlib,那么C…

el-table每一行的回调方法及假删除真隐藏

html数据 <template><el-table :data"tableData" :row-class-name"rowClassName">//每一行的回调方法<el-table-column fixed prop"date" label"日期" width"150"></el-table-column><el-table…

Unknown encoder ‘libmp3lame

环境&#xff1a; macos m1 &#xff0c; python3.10.x 背景 做视频切片&#xff0c; 使用moviepy 中VideoFileClip进行截取视频。 报错&#xff1a; Unknown encoder libmp3lameThe audio export failed because FFMPEG didnt find the specified codec for audio encoding …

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力. 来自加利福利亚大学戴维斯分校计算机科学系的IFM实验室发表在arXiv上的文章:“Graph-ToolFormer: To Empower LLMs with Graph Reasoning Ability via Prompt Augmented by ChatGPT”。 文章的…

Java 字符串 07 练习-手机号屏蔽、身份证号信息查看,游戏骂人敏感词替换

注意点&#xff1a;只有返回值才是被截取的小串&#xff0c;所以需要有一个变量去承接它&#xff1b; 自己写的代码&#xff1a; import java.util.Scanner; public class practice {public static void main(String[] args) {Scanner input new Scanner(System.in);String …

Mac Idea安装后无法启动

1、起因 想安装一个新版的idea2023.3.2&#xff0c;结果安装完之后直接无法启动 以为是卸载不干净&#xff0c;下载了一个腾讯柠檬&#xff0c;结果将2018版也一并卸载了 好家伙&#xff0c;彻底没得用 2、找原因 1&#xff09;查看idea报错信息 网上找了一圈&#xff0c;其…