admin管理员组文章数量:1530842
文章目录
- 1. gn工具生成
- 1.1 问题,找不到last_commit_position.h文件
- 问题描述如下:
- 解决方法
- 1.2 ninja文件不是对应架构问题
- 问题描述:
- 解决方法
- 1.3 问题3:clang++找不到
- 问题描述
- 解决方法
- 2. electron 编译参数生成
- 2.1 下载对应版本debian_bullseye_arm64-sysroot
- 错误描述
- 解决方法
- 2.2 node找不到
- 2.3 electron版本找不到
- 3. electron ninja编译
- 3.1 electron版本问题
- 3.2 node版本不对
- 3.3 npm找不到
- 3.4 ModuleNotFoundError: No module named '_bz2'
- 3.5 python3错误
- 3.6 FileNotFoundError: [Errno 2] No such file or directory: 'gperf': 'gperf'
- 3.7 运行时崩溃
- 错误原因:
- 修改办法:
- 3.8 ModuleNotFoundError: No module named 'importlib_metadata'
- 3.9 crp打包平台,打包arm版本错误
1. gn工具生成
在arm64下需要构建对应架构的gn文件。
源代码下载,并且切换到对应的版本。
将代码同步到electron/src/tools/gn目录中
git clone https://gn.googlesource/gn
cd gn
git checkout 5a004f9427a0
将gn源码放在src/tools/gn目录下,内容如下图
1.1 问题,找不到last_commit_position.h文件
问题描述如下:
执行命令,以下命令用于生成gn文件
./tools/gn/bootstrap/bootstrap.py --skip-generate-buildfiles
Traceback (most recent call last):
File "/data/home/uos/electron/src/./tools/gn/bootstrap/bootstrap.py", line 143, in <module>
sys.exit(main(sys.argv[1:]))
File "/data/home/uos/electron/src/./tools/gn/bootstrap/bootstrap.py", line 124, in main
shutil.copy2(
File "/usr/local/python3.9.17/lib/python3.9/shutil.py", line 444, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/usr/local/python3.9.17/lib/python3.9/shutil.py", line 264, in copyfile
with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: '/data/home/uos/electron/src/tools/gn/bootstrap/last_commit_position.h'
解决方法
cd gn
build/gen.py
在out目录下会生成last_commit_position.h文件,将该文件拷贝到electron/src/tools/gn/bootstrap目录中。
1.2 ninja文件不是对应架构问题
问题描述:
因为在PATH中使用了depot_tools的地址,因此在执行脚本./tools/gn/bootstrap/bootstrap.py --skip-generate-buildfiles时,使得ninja使用depot_tools中的ninja.py这个文件,这个文件会指定使用
electron/src/third_party/ninja/ninja中的文件,electron/src/third_party/ninja/ninja这个文件时一个amd64架构的文件因此造成错误。
./tools/gn/bootstrap/bootstrap.py --skip-generate-buildfiles
Traceback (most recent call last):
File "/home/uos/depot_tools/ninja.py", line 94, in <module>
sys.exit(main(sys.argv))
File "/home/uos/depot_tools/ninja.py", line 87, in main
return subprocess.call([ninja_path] + args[1:])
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 349, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 1837, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: '/data/home/uos/electron/src/third_party/ninja/ninja'
Traceback (most recent call last):
File "/data/home/uos/electron/src/./tools/gn/bootstrap/bootstrap.py", line 143, in <module>
sys.exit(main(sys.argv[1:]))
File "/data/home/uos/electron/src/./tools/gn/bootstrap/bootstrap.py", line 129, in main
subprocess.check_call(cmd)
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja', '-C', '/data/home/uos/electron/src/out/Release/gn_build', '-w', 'dupbuild=err', 'gn']' returned non-zero exit status 1.
解决方法
在PATH中移除depot_tools地址
安装ninja-build
sudo apt install ninja-build
查看ninja版本
1.3 问题3:clang++找不到
问题描述
执行命令,找不到clang++
./tools/gn/bootstrap/bootstrap.py --skip-generate-buildfiles
爆出错误如下
ninja: Entering directory `/data/home/uos/electron/src/out/Release/gn_build'
[1/195] CXX src/base/command_line.o
FAILED: src/base/command_line.o
clang++ -MMD -MF src/base/command_line.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/command_line -o src/base/command_line.o
/bin/sh: 1: clang++: not found
[2/195] CXX src/base/environment.o
FAILED: src/base/environment.o
clang++ -MMD -MF src/base/environment.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/environment -o src/base/environment.o
/bin/sh: 1: clang++: not found
[3/195] CXX src/base/files/file.o
FAILED: src/base/files/file.o
clang++ -MMD -MF src/base/files/file.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/files/file -o src/base/files/file.o
/bin/sh: 1: clang++: not found
[4/195] CXX src/base/files/file_enumerator.o
FAILED: src/base/files/file_enumerator.o
clang++ -MMD -MF src/base/files/file_enumerator.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/files/file_enumerator -o src/base/files/file_enumerator.o
/bin/sh: 1: clang++: not found
[5/195] CXX src/base/files/file_path.o
FAILED: src/base/files/file_path.o
clang++ -MMD -MF src/base/files/file_path.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/files/file_path -o src/base/files/file_path.o
/bin/sh: 1: clang++: not found
[6/195] CXX src/base/files/file_path_constants.o
FAILED: src/base/files/file_path_constants.o
clang++ -MMD -MF src/base/files/file_path_constants.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/files/file_path_constants -o src/base/files/file_path_constants.o
/bin/sh: 1: clang++: not found
[7/195] CXX src/base/files/file_util.o
FAILED: src/base/files/file_util.o
clang++ -MMD -MF src/base/files/file_util.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/files/file_util -o src/base/files/file_util.o
/bin/sh: 1: clang++: not found
[8/195] CXX src/base/files/scoped_file.o
FAILED: src/base/files/scoped_file.o
clang++ -MMD -MF src/base/files/scoped_file.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/files/scoped_file -o src/base/files/scoped_file.o
/bin/sh: 1: clang++: not found
[9/195] CXX src/base/files/scoped_temp_dir.o
FAILED: src/base/files/scoped_temp_dir.o
clang++ -MMD -MF src/base/files/scoped_temp_dir.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/files/scoped_temp_dir -o src/base/files/scoped_temp_dir.o
/bin/sh: 1: clang++: not found
[10/195] CXX src/base/json/json_parser.o
FAILED: src/base/json/json_parser.o
clang++ -MMD -MF src/base/json/json_parser.o.d -I../../../tools/gn/src -I. -D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS -DNDEBUG -O3 -fdata-sections -ffunction-sections -Werror -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -pthread -pipe -fno-exceptions -fno-rtti -fdiagnostics-color -Wall -Wextra -Wno-unused-parameter -Wextra-semi -Wundef -std=c++17 -Wrange-loop-analysis -Wextra-semi-stmt -c ../../../tools/gn/src/base/json/json_parser -o src/base/json/json_parser.o
/bin/sh: 1: clang++: not found
ninja: build stopped: subcommand failed.
Traceback (most recent call last):
File "/data/home/uos/electron/src/./tools/gn/bootstrap/bootstrap.py", line 143, in <module>
sys.exit(main(sys.argv[1:]))
File "/data/home/uos/electron/src/./tools/gn/bootstrap/bootstrap.py", line 129, in main
subprocess.check_call(cmd)
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['ninja', '-C', '/data/home/uos/electron/src/out/Release/gn_build', '-w', 'dupbuild=err', 'gn']' returned non-zero exit status 1.
解决方法
编译对应版本的LLVM
编译方法查看文章
https://arv000.blog.csdn/article/details/135367062
将安装的文件替换
third_party/llvm-build/Release+Asserts
内容如下图:
设置clang地址
export PATH=$PATH:/data/home/uos/electron/src/third_party/llvm-build/Release+Asserts/bin
注意执行./tools/gn/bootstrap/bootstrap.py --skip-generate-buildfiles前需要将out/Release/gn_build文件删除。
2. electron 编译参数生成
2.1 下载对应版本debian_bullseye_arm64-sysroot
错误描述
执行命令
out/Release/gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
错误提示:
ERROR at //build/config/sysroot.gni:62:7: Assertion failed.
assert(
^-----
Missing sysroot (//build/linux/debian_bullseye_arm64-sysroot). To fix, run: build/linux/sysroot_scripts/install-sysroot.py --arch=arm64
See //build/config/sysroot.gni:63:11:
exec_script("//build/dir_exists.py",
^-----------------------------------
This is where it was set.
See //third_party/rust/cxx/chromium_integration/rust_cxx.gni:7:1: whence it was imported.
import("//build/config/sysroot.gni")
^----------------------------------
See //build/rust/rust_target.gni:12:3: whence it was imported.
import("//third_party/rust/cxx/chromium_integration/rust_cxx.gni")
^----------------------------------------------------------------
See //build/rust/rust_static_library.gni:5:1: whence it was imported.
import("//build/rust/rust_target.gni")
^------------------------------------
See //testing/test.gni:14:1: whence it was imported.
import("//build/rust/rust_static_library.gni")
^--------------------------------------------
See //testing/libfuzzer/fuzzer_test.gni:9:1: whence it was imported.
import("//testing/test.gni")
^--------------------------
See //media/media_options.gni:12:1: whence it was imported.
import("//testing/libfuzzer/fuzzer_test.gni")
^-------------------------------------------
See //BUILD.gn:28:1: whence it was imported.
import("//media/media_options.gni")
^---------------------------------
解决方法
方法一:(推荐)
查看electron/script/sysroots.json内容
地址需要自己拼装拿到下载地址
https://dev-cdn.electronjs/linux-sysroots/2354ab6674a0725d0c4f304b47f908eba6e3b8c7/debian_bullseye_arm64_sysroot.tar.xz
将debian_bullseye_arm64_sysroot.tar.xz放在
方法二:
执行脚本
build/linux/sysroot_scripts/install-sysroot.py --arch=arm64
会自动下载,并且安装
2.2 node找不到
执行命令
out/Release/gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
错误提示如下:
ERROR at //electron/BUILD.gn:110:20: Script returned non-zero exit code.
electron_version = exec_script("script/print-version.py",
^----------
Current dir: /home/uos/electron/src/out/Release/
Command: python3 /home/uos/electron/src/electron/script/print-version.py
Returned 1.
stderr:
Traceback (most recent call last):
File "/home/uos/electron/src/electron/script/print-version.py", line 3, in <module>
print(get_electron_version())
File "/home/uos/electron/src/electron/script/lib/util.py", line 144, in get_electron_version
cached_electron_version = str.strip(execute([
File "/home/uos/electron/src/electron/script/lib/util.py", line 122, in execute
output = subprocess.check_output(argv, stderr=subprocess.STDOUT,
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 505, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 1837, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'node'
See //electron/build/args/all.gn:2:21: which caused the file to be included.
root_extra_deps = [ "//electron" ]
^-----------
2.3 electron版本找不到
问题原因
由于我删除了原来.git文件,导致无法通过git命令获取版本,因此需要修改关于版本获取的代码问题。
执行脚本
out/Release/gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
错误提示:
ERROR at //electron/BUILD.gn:110:20: Script returned non-zero exit code.
electron_version = exec_script("script/print-version.py",
^----------
Current dir: /home/uos/electron/src/out/Release/
Command: python3 /home/uos/electron/src/electron/script/print-version.py
Returned 1 and printed out:
b"<Buffer 66 61 74 61 6c 3a 20 e6 b2 a1 e6 9c 89 e5 8f 91 e7 8e b0 e5 90 8d e7 a7 b0 ef bc 8c e6 97 a0 e6 b3 95 e6 8f 8f e8 bf b0 e4 bb bb e4 bd 95 e4 b8 9c e8 ... >\n/home/uos/electron/src/electron/script/lib/get-version.js:19\n throw new Error('Failed to get current electron version');\n ^\n\nError: Failed to get current electron version\n at Object.module.exports.getElectronVersion (/home/uos/electron/src/electron/script/lib/get-version.js:19:11)\n at [eval]:1:37\n at Script.runInThisContext (vm.js:122:20)\n at Object.runInThisContext (vm.js:329:38)\n at Object.<anonymous> ([eval]-wrapper:6:22)\n at Module._compile (internal/modules/cjs/loader.js:778:30)\n at evalScript (internal/bootstrap/node.js:590:27)\n at startup (internal/bootstrap/node.js:265:9)\n at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)\n"
stderr:
Traceback (most recent call last):
File "/home/uos/electron/src/electron/script/print-version.py", line 3, in <module>
print(get_electron_version())
File "/home/uos/electron/src/electron/script/lib/util.py", line 144, in get_electron_version
cached_electron_version = str.strip(execute([
File "/home/uos/electron/src/electron/script/lib/util.py", line 129, in execute
raise e
File "/home/uos/electron/src/electron/script/lib/util.py", line 122, in execute
output = subprocess.check_output(argv, stderr=subprocess.STDOUT,
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 528, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['node', '-p', 'require("./script/lib/get-version").getElectronVersion()']' returned non-zero exit status 1.
See //electron/build/args/all.gn:2:21: which caused the file to be included.
root_extra_deps = [ "//electron" ]
^-----------
解决方案
修改src/electron/script/lib/get-version.js直接返回版本
3. electron ninja编译
3.1 electron版本问题
3.2 node版本不对
由于在arm架构下编译,他的原始对应的架构是amd架构导致node的架构不匹配,需要下载对应的架构进行替换。
下载对应版本的node
https://nodejs/download/release/v16.3.0/
替换掉/home/uos/electron/src/third_party/node/linux/node-linux-x64内容
OSError: [Errno 8] Exec format error: '/home/uos/electron/src/third_party/node/linux/node-linux-x64/bin/node'
建议amd64版本也替换,因为在真实构架环境是docker环境,里面可能没有对应的node,在原始的代码中,只有node没有npm等相关内容。
3.3 npm找不到
执行命令
ninja -C out/Release electron
错误信息如下:
ninja: Entering directory `out/Release'
[588/44261] ACTION //electron:npm_pre_flight_default_app_js(//build/toolchain/linux:clang_arm64)
FAILED: gen/electron/npm_pre_stamps/npm_pre_flight_default_app_js.stamp
python3 ../../electron/build/npm-run.py --silent pre-flight -- --stamp /home/uos/electron/src/out/Release/gen/electron/npm_pre_stamps/npm_pre_flight_default_app_js.stamp
Traceback (most recent call last):
File "/home/uos/electron/src/out/Release/../../electron/build/npm-run.py", line 16, in <module>
subprocess.check_output(args, stderr=subprocess.STDOUT)
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 424, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 505, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 1837, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'npm'
[597/44261] CXX obj/third_party/swiftshader/third_party/SPIRV-Tools/spvtools_opt/folding_rules.o
ninja: build stopped: subcommand failed.
处理办法
export PATH=/home/uos/electron/src/third_party/node/linux/node-linux-x64/bin:$PATH
3.4 ModuleNotFoundError: No module named ‘_bz2’
由于切换了python版本导致的,其实系统版本3.7.3就可以使用不需要进行过切换,切换版本的原因是因为需要下载代码导致。
操作系统使用的时3.7.3版本我自己修改了版本python3.9,其实没有必要更换
ninja: Entering directory `out/Release'
[25/43654] ACTION //electron:generate_config_gypi(//build/toolchain/linux:clang_arm64)
FAILED: gen/config.gypi
python3 ../../electron/script/generate-config-gypi.py /home/uos/electron/src/out/Release/gen/config.gypi arm64
Traceback (most recent call last):
File "/home/uos/electron/src/electron/../third_party/electron_node/configure.py", line 14, in <module>
import bz2
File "/usr/local/python3.9.17/lib/python3.9/bz2.py", line 18, in <module>
from _bz2 import BZ2Compressor, BZ2Decompressor
ModuleNotFoundError: No module named '_bz2'
Traceback (most recent call last):
File "/home/uos/electron/src/out/Release/../../electron/script/generate-config-gypi.py", line 69, in <module>
sys.exit(main(sys.argv[1], sys.argv[2]))
File "/home/uos/electron/src/out/Release/../../electron/script/generate-config-gypi.py", line 50, in main
run_node_configure(target_cpu)
File "/home/uos/electron/src/out/Release/../../electron/script/generate-config-gypi.py", line 28, in run_node_configure
subprocess.check_call([sys.executable, configure] + args)
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/usr/bin/python3', '/home/uos/electron/src/electron/../third_party/electron_node/configure.py', '--dest-cpu', 'arm64', '--experimental-enable-pointer-compression', '--openssl-no-asm']' returned non-zero exit status 1.
[34/43654] CXX obj/skia/skia_core_and_effects/GlyphRun.o
ninja: build stopped: subcommand failed.
- 找到lib-dynload位置
sudo find / -name lib-dynload
- 拷贝文件
·
cd /usr/lib/python3.7/lib-dynload
sudo cp _bz2.cpython-37m-aarch64-linux-gnu.so /usr/local/python3.9.17/lib/python3.9/lib-dynload
cd /usr/local/python3.9.17/lib/python3.9/lib-dynload
sudo mv _bz2.cpython-37m-aarch64-linux-gnu.so _bz2.cpython-39-aarch64-linux-gnu.so
sudo chmod +x _bz2.cpython-39-aarch64-linux-gnu.so
3.5 python3错误
切换会原来的版本3.7.3系统版本
inja: Entering directory `out/Release'
[23/43608] ACTION //electron:generate_config_gypi(//build/toolchain/linux:clang_arm64)
FAILED: gen/config.gypi
python3 ../../electron/script/generate-config-gypi.py /home/uos/electron/src/out/Release/gen/config.gypi arm64
Traceback (most recent call last):
File "/home/uos/electron/src/out/Release/../../electron/script/generate-config-gypi.py", line 69, in <module>
sys.exit(main(sys.argv[1], sys.argv[2]))
File "/home/uos/electron/src/out/Release/../../electron/script/generate-config-gypi.py", line 50, in main
run_node_configure(target_cpu)
File "/home/uos/electron/src/out/Release/../../electron/script/generate-config-gypi.py", line 28, in run_node_configure
subprocess.check_call([sys.executable, configure] + args)
File "/usr/local/python3.9.17/lib/python3.9/subprocess.py", line 373, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/usr/bin/python3', '/home/uos/electron/src/electron/../third_party/electron_node/configure.py', '--dest-cpu', 'arm64', '--experimental-enable-pointer-compression', '--openssl-no-asm']' died with <Signals.SIGBUS: 7>.
[32/43608] CXX obj/skia/skia_core_and_effects/SkPathWriter.o
ninja: build stopped: subcommand failed.
解决办法:
cd /usr/bin
sudo rm -rf python3
sudo ln -s python3.7 python3
3.6 FileNotFoundError: [Errno 2] No such file or directory: ‘gperf’: ‘gperf’
ninja: Entering directory `out/Release'
[406/43577] ACTION //electron:generate_config_gypi(//build/toolchain/linux:clang_arm64)
WARNING: --openssl-no-asm will result in binaries that do not take advantage
of modern CPU cryptographic instructions and will therefore be slower.
Please refer to BUILDING.md
WARNING: warnings were emitted in the configure phase
INFO: configure completed successfully
[4786/43577] ACTION //third_party/blink/renderer/core:make_core_generated_css_value_keywords(//build/toolchain/linux:clang_arm64)
FAILED: gen/third_party/blink/renderer/core/css_value_keywords gen/third_party/blink/renderer/core/css_value_keywords.h
python3 ../../third_party/blink/renderer/build/scripts/run_with_pythonpath.py -I ../../third_party/blink/renderer/build/scripts -I ../../third_party -I ../../tools ../../third_party/blink/renderer/build/scripts/core/css/make_css_value_keywords.py ../../third_party/blink/renderer/core/css/css_value_keywords.json5 --output_dir gen/third_party/blink/renderer/core --gperf gperf
Traceback (most recent call last):
File "/home/uos/electron/src/third_party/blink/renderer/build/scripts/gperf.py", line 29, in generate_gperf
universal_newlines=True)
File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'gperf': 'gperf'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "../../third_party/blink/renderer/build/scripts/core/css/make_css_value_keywords.py", line 83, in <module>
json5_generator.Maker(CSSValueKeywordsWriter).main()
File "/home/uos/electron/src/third_party/blink/renderer/build/scripts/json5_generator.py", line 345, in main
writer.write_files(args.output_dir)
File "/home/uos/electron/src/third_party/blink/renderer/build/scripts/json5_generator.py", line 303, in write_files
self._write_file_if_changed(output_dir, generator(), file_name)
File "/home/uos/electron/src/third_party/blink/renderer/build/scripts/gperf.py", line 71, in generator_internal
return generate_gperf(gperf_path, gperf_input, gperf_args)
File "/home/uos/electron/src/third_party/blink/renderer/build/scripts/gperf.py", line 53, in generate_gperf
127, cmd, output='Command not found.')
subprocess.CalledProcessError: Command '['gperf', '--key-positions=*', '-P', '-n', '-m', '50', '-D', '-Q', 'CSSValueStringPool']' returned non-zero exit status 127.
[4795/43577] ACTION //third_party/blink/renderer/bindings:web_idl_database(//build/toolchain/linux:clang_arm64)
ninja: build stopped: subcommand failed.
解决方案:
sudo apt install gperf
3.7 运行时崩溃
执行命令
uos@uos-PC:~/electron/src/out/Release$ ./electron --no-sandbox --disable-gpu
崩溃信息如下:
Electron 25.9.8 - Build cross platform desktop apps with JavaScript, HTML, and CSS
Usage: electron [options] [path]
A path to an Electron app may be specified. It must be one of the following:
- index.js file.
- Folder containing a package.json file.
- Folder containing an index.js file.
- .html/.htm file.
- http://, https://, or file:// URL.
Options:
-i, --interactive Open a REPL to the main process.
-r, --require Module to preload (option can be repeated).
-v, --version Print the version.
-a, --abi Print the Node ABI version.
[20266:0109/165301.051713:ERROR:object_proxy(590)] Failed to call method: org.freedesktop.portal.Settings.Read: object_path= /org/freedesktop/portal/desktop: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.portal.Desktop was not provided by any .service files
*** stack smashing detected ***: <unknown> terminated
Received signal 6
#0 0xaaaadaf6fac8 base::debug::CollectStackTrace()
#1 0xaaaadaf31ea4 base::debug::StackTrace::StackTrace()
#2 0xaaaadaf31e44 base::debug::StackTrace::StackTrace()
#3 0xaaaadaf6f908 base::debug::(anonymous namespace)::StackDumpSignalHandler()
#4 0xffff8c9e5698 ([vdso]+0x697)
#5 0xffff8ad0c884 gsignal
#6 0xffff8acfa968 abort
#7 0xffff8ad46868 (/usr/lib/aarch64-linux-gnu/libc-2.28.so+0x6c867)
#8 0xffff8adbab24 (/usr/lib/aarch64-linux-gnu/libc-2.28.so+0xe0b23)
#9 0xffff8adbaad8 __stack_chk_fail
#10 0xaaaadaf7bd3c __stack_chk_fail
#11 0xaaaae7f8617c content::RenderFrameImpl::PrepareFrameForCommit()
#12 0xaaaae7f851f0 content::RenderFrameImpl::CommitNavigationWithParams()
#13 0xaaaae7fbd74c base::internal::FunctorTraits<>::Invoke<>()
#14 0xaaaae7fbd480 base::internal::InvokeHelper<>::MakeItSo<>()
#15 0xaaaae7fbd2a0 base::internal::Invoker<>::RunImpl<>()
#16 0xaaaae7fbd0a4 base::internal::Invoker<>::RunOnce()
#17 0xaaaae7fa05e8 base::OnceCallback<>::Run()
#18 0xaaaae7f840f4 content::RenderFrameImpl::CommitNavigation()
#19 0xaaaae80a1644 content::NavigationClient::CommitNavigation()
#20 0xaaaad1b4254c content::mojom::NavigationClientStubDispatch::AcceptWithResponder()
#21 0xaaaae80a2ba4 content::mojom::NavigationClientStub<>::AcceptWithResponder()
#22 0xaaaadb6182c8 mojo::InterfaceEndpointClient::HandleValidatedMessage()
#23 0xaaaadb617eec mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept()
#24 0xaaaadb639e60 mojo::MessageDispatcher::Accept()
#25 0xaaaadb61a2d0 mojo::InterfaceEndpointClient::HandleIncomingMessage()
#26 0xaaaadc1e5d0c IPC::(anonymous namespace)::ChannelAssociatedGroupController::AcceptOnEndpointThread()
#27 0xaaaadc1d7f80 base::internal::FunctorTraits<>::Invoke<>()
#28 0xaaaadc1d7ec8 base::internal::InvokeHelper<>::MakeItSo<>()
#29 0xaaaadc1d7e4c base::internal::Invoker<>::RunImpl<>()
#30 0xaaaadc1d7db0 base::internal::Invoker<>::RunOnce()
#31 0xaaaacc5f21a4 base::OnceCallback<>::Run()
#32 0xaaaadaddf730 base::TaskAnnotator::RunTaskImpl()
#33 0xaaaadae459a0 base::TaskAnnotator::RunTask<>()
#34 0xaaaadae4568c base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl()
#35 0xaaaadae44c74 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork()
#36 0xaaaadacb0fcc base::MessagePumpDefault::Run()
#37 0xaaaadae46014 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run()
#38 0xaaaadad5fdb8 base::RunLoop::Run()
#39 0xaaaae811dc28 content::RendererMain()
#40 0xaaaacd461250 content::RunZygote()
#41 0xaaaacd461998 content::RunOtherNamedProcessTypeMain()
#42 0xaaaacd462c48 content::ContentMainRunnerImpl::Run()
#43 0xaaaacd45ed4c content::RunContentProcess()
#44 0xaaaacd45f37c content::ContentMain()
#45 0xaaaacc5e13f4 main
#46 0xffff8acfada4 __libc_start_main
#47 0xaaaacc5af034 (/home/uos/electron/src/out/Release/electron+0xe0a3033)
[end of stack trace]
错误原因:
由于c++编译时传递编译参数stack-protector使得对运行时对栈强制检测,因此导致崩溃。修改编译参数只是避免了不检测,但是不是完全的解决问题,需要找到对应的代码进行检测。
修改办法:
修改config/compiler/BUILD.gn内容
修改为
cflags += [ "-fstack-protector" ]
cflags += [ "-fno-stack-protector" ]
3.8 ModuleNotFoundError: No module named ‘importlib_metadata’
问题,因为缺少python3的依赖,我使用的python版本是3.7.3默认不携带这个包。
Traceback (most recent call last):
File "../../third_party/blink/renderer/bindings/scripts/generate_bindings.py", line 12, in
import bind_gen
File "/build/org.deepin.electron-0.0.2/src/third_party/blink/renderer/bindings/scripts/bind_gen/__init__.py", line 36, in
from .callback_function import generate_callback_functions
File "/build/org.deepin.electron-0.0.2/src/third_party/blink/renderer/bindings/scripts/bind_gen/callback_function.py", line 8, in
from .blink_v8_bridge import blink_class_name
File "/build/org.deepin.electron-0.0.2/src/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py", line 8, in
from .code_node import FormatNode
File "/build/org.deepin.electron-0.0.2/src/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py", line 13, in
from .mako_renderer import MakoRenderer
File "/build/org.deepin.electron-0.0.2/src/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py", line 7, in
import mako.runtime
File "/build/org.deepin.electron-0.0.2/src/third_party/mako/mako/mako/runtime.py", line 14, in
from mako import compat
File "/build/org.deepin.electron-0.0.2/src/third_party/mako/mako/mako/compat.py", line 68, in
import importlib_metadata # noqa
ModuleNotFoundError: No module named 'importlib_metadata'
解决方案有两种,
方案一:
- 安装python的依赖包就可以了。
方案二:
由于我们操作系统在打包编译的时候使用的纯净环境,不允许下载因此我只能修改代码的方式解决这个问题。
修改python脚本使其是依赖importlib_metadata
3.9 crp打包平台,打包arm版本错误
python3 ../../mojo/public/tools/mojom/mojom_parser.py --input-root ../.. --input-root gen --output-root gen --mojom-file-list=gen/mojo/public/mojom/base/base__parser.rsp --check-imports gen/mojo/public/mojom/base/base.build_metadata --enable-feature file_path_is_string --enable-feature is_posix --enable-feature is_linux --add-module-metadata webui_module_path=chrome://resources/mojo/mojo/public/mojom/base
Traceback (most recent call last):
File "../../mojo/public/tools/mojom/mojom_parser.py", line 496, in
Run(sys.argv[1:])
File "../../mojo/public/tools/mojom/mojom_parser.py", line 491, in Run
args.enabled_features, module_metadata, allowed_imports)
File "../../mojo/public/tools/mojom/mojom_parser.py", line 305, in _ParseMojoms
for mojom_abspath, ast in _Shard(_ParseAstHelper, map_args):
File "../../mojo/public/tools/mojom/mojom_parser.py", line 245, in _Shard
pool = multiprocessing.Pool(processes=processes)
File "/usr/lib/python3.7/multiprocessing/context.py", line 119, in Pool
context=self.get_context())
File "/usr/lib/python3.7/multiprocessing/pool.py", line 158, in __init__
self._setup_queues()
File "/usr/lib/python3.7/multiprocessing/pool.py", line 251, in _setup_queues
self._inqueue = self._ctx.SimpleQueue()
File "/usr/lib/python3.7/multiprocessing/context.py", line 112, in SimpleQueue
return SimpleQueue(ctx=self.get_context())
File "/usr/lib/python3.7/multiprocessing/queues.py", line 332, in __init__
self._rlock = ctx.Lock()
File "/usr/lib/python3.7/multiprocessing/context.py", line 67, in Lock
return Lock(ctx=self.get_context())
File "/usr/lib/python3.7/multiprocessing/synchronize.py", line 162, in __init__
SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx)
File "/usr/lib/python3.7/multiprocessing/synchronize.py", line 59, in __init__
unlink_now)
OSError: [Errno 38] Function not implemented
由于打包平台是linux环境隔离的,在打包环境中,缺少了/dev/shm共享内存的挂在,导致python3版本多线程无法使用。
方法一:
更新python脚本的版本,使用python3
方法二:
chatgpt答案:没有经过验证
在 Docker 中,你可以通过在容器中创建一个共享内存的挂载点,将宿主机上的 /dev/shm
挂载到容器内部。这可以通过在运行容器时使用 -v
选项来实现。以下是具体步骤:
docker run -v /dev/shm:/dev/shm your_image
这个命令将宿主机的 /dev/shm
目录挂载到容器内的相同路径。这样,在容器内部对 /dev/shm
的访问将实际上是对宿主机上的 /dev/shm
的访问。
请注意,在默认情况下,Docker 容器是可以访问宿主机的 /dev/shm
的,因此这样的挂载可能并不总是必需的。如果你的应用程序没有特殊的需求,可能无需手动挂载。
如果你想要设置更多的共享内存大小,可以通过在 Docker run 命令中使用 --shm-size
选项来指定大小。例如:
docker run --shm-size=1g your_image
上述命令将设置容器的共享内存大小为 1GB。你可以根据实际需求调整这个值。
版权声明:本文标题:arm64架构编译electron长征路 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1725588113a1031407.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论