Linux CEF(Chromium Embedded Framework)源码下载编译详细记录

这篇具有很好参考价值的文章主要介绍了Linux CEF(Chromium Embedded Framework)源码下载编译详细记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux CEF(Chromium Embedded Framework)源码下载编译

背景

由于CEF默认的二进制分发包不支持音视频播放,需要自行编译源码,将ffmpeg开关打开才能支持。这里介绍的是Linux平台下的CEF源码下载编译过程。

Windows平台参考:
《Windows 编译CEF源码详细记录》

前置条件

下载的过程非常艰辛,因为硬性要求比较高。

  • 16GB RAM (推荐 32GB+ )
  • 120GB SSD硬盘空闲空间起步(避免机械硬盘)
  • 100Mbps带宽(包括代理带宽)以及100G以上的代理流量

这里额外说明一下,下载过程总是失败,大概率原因是因为网络的问题,尤其是网络带宽和代理带宽。这里为什么要单独提代理带宽呢,因为公司有提供代理服务,但是只有10Mbps,所以会导致下载超时,服务端关闭连接。

注意,由于一些因素,下载代码的环境是基于WSL,编译的时候是在UOS V20 1050系统上,但总体差异不大,相关路径会有区别,仍有参考价值。

接下来开始下载CEF的代码

下载

创建目录结构

首先,先创建目录结构,最终的目录结构如下:

~/CEF/
  automate/
    automate-git.py   <-- CEF build script
  chromium_git/
    cef/              <-- CEF source checkout
    chromium/
      src/            <-- Chromium source checkout
    update.[bat|sh]   <-- Bootstrap script for automate-git.py
  depot_tools/        <-- Chromium build tools

可以使用以下命令,创建目录

mkdir CEF && cd CEF && mkdir automate && mkdir chromium_git

终端设置代理

这一步非常重要,因为需要让终端走代理,才能正常下载代码

设置终端代理

export http_proxy=127.0.0.1:7890
export https_proxy=127.0.0.1:7890

通常情况下,这样就可以了,但由于公司的代理问题,设置了代理之后,bitbucket.org域名无法访问,所以我这里将bitbucket.org域名排除在外,这一步因人而异,但基本是不需要这一步的。

export no_proxy=localhost,bitbucket.org

验证代理是否设置成功

leoya@leoya-PC:~$ curl -I https://chromium.googlesource.com
HTTP/1.1 200 Connection established

HTTP/2 200 
content-security-policy: script-src 'nonce-WfQMl6EHcID6PtyTna5LNQ' 'unsafe-inline' 'strict-dynamic' https: http: 'unsafe-eval';object-src 'none';base-uri 'self';report-uri https://csp.withgoogle.com/csp/gerritcodereview/1
content-type: text/html; charset=utf-8
strict-transport-security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 0
date: Fri, 30 Jun 2023 02:04:17 GMT
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000

这里通过curl去获取响应信息,能获取到状态码200或者304,即说明访问正常。可以额外对bitbucket.org也测试一下,如果访问失败,那说明需要将它排除在代理规则内,通过上述方法或者代理软件(如clash)设置代理规则为直连即可。

设置git代理

git config --global http.proxy 127.0.0.1:7890
git config --global https.proxy 127.0.0.1:7890

下载脚本

在CEF根目录下,下载depot_tools,并配置环境变量

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=/home/leoya/CEF/depot_tools:$PATH

下载automate-git.py脚本,这里需要在CEF/automate目录下

cd automate/
wget https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py

创建 ~/CEF/chromium_git/update.sh脚本

#!/bin/bash
python3 ../automate/automate-git.py --download-dir=/home/leoya/CEF/chromium_git --depot-tools-dir=/home/leoya/CEF/depot_tools --no-distrib --no-build

执行脚本

设置权限并执行

chmod 755 update.sh
./update.sh

接下来就是无尽的等待。

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium

这里要特别注意depot_tools的更新进度,每次执行脚本的时候,它都会先更新depot_tools,如果更新状态过慢,可能网络有问题。

下载cef仓库的时候一般是没什么问题的。

这里最关键的是下载chromium源码的环节,因为脚本执行中断往往就是在这个环节。因为网络稳定性、下载速率等问题,导致出错。

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium

当你看到Still working on字样的时候,恭喜你,你已经迈过了最艰难的环节,接下来就是下载终端,重试的成本也比较低,因为不用重新下载chromium源码。

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium
Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium

接下来见证下载成功的时刻!!!

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium

报错信息总结

以下原因解释不一定正确,仅供参考
1.

[1:38:14] error: RPC failed; curl 56 GnuTLS recv error (-9):Error decoding the received TLS packet.[1:30:14] fatal:the remote end hung up unexpectedly
[1:30:14] fatail:"early EOF
[1:30:14] fatat: index-pack failed1:30:16]

Linux CEF(Chromium Embedded Framework)源码下载编译详细记录,CEF,linux,cef,chromium
这里大概率是网络不稳定导致下载中断

error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: 远端意外挂断了
fatal: 过早的文件结束符(EOF)
fatal: index-pack 失败

这个就是因为下载速率太慢,导致长时间占用连接,服务端就主动关闭了连接。

编译 CEF

接下来即可修改ffmpeg文件以添加音视频的支持了

设置ffmpeg

chromium_git/chromium/src/third_party/ffmpeg/chromium/config/Chromium/linux/x64/config_components.h文件的宏#define CONFIG_SIPR_PARSER 1由0设置为1,即启用。

生成工程

终端输入

export GN_DEFINES="use_sysroot=true symbol_level=1 is_cfi=false use_thin_lto=false use_vaapi=false ffmpeg_branding=Chrome proprietary_codecs=true is_official_build=true use_gnome_keyring=false chrome_pgo_phase=0"
  • ffmpeg_branding和proprietary_codecs 表示开启多媒体编解码支持,但默认仅支持一小部分,想要支持更多可修改上面 ffmpeg 配置文件。
  • is_official_build 决定了是否是编译正式版本,指定该参数为 true 基本上都是为了产品发布使用,同时也会在创建解决方案的时候生成带有 sandbox 的解决方案,而不指定这个参数是没有的。
  • use_jumbo_build 官方资料默认指定,表示是否启用试验性的 jumbo 编译,编译过程会加快很多(至少快 1 小时),但是占用 CPU 和内存(尤其是内存)会剧增。
  • is_component_build 官方资料默认指定,但我们没有开启,这个参数表示是否启用组件化编译,设置为 true 以后,base、ffmpeg 等等都会被编译为动态库,使用时也是动态链接,编译出来的 cef_sandbox 只有几兆大小,并且你需要复制很多 dll 文件到项目目录下才能运行。

这里需要注意几个参数use_vaapi如果未设置为false,即使安装了vaapi,也会出现头文件的一些错误信息。

chrome_pgo_phase=0 禁用pgo文件。

use_gnome_keyring设置为false

进入code/chromium_git/chromium/src/cef路径,执行脚本,生成工程文件

./cef_create_projects.sh

问题处理

在生成工程的过程中,我这里遇到了很多错误,大多是缺失库。

printing:printing_unittests
ERROR at dynamically parsed input that //printing/BUILD.gn:464:16 loaded :1:1: Invalid token in literal value
-------------------------------------
^
See //BUILD.gn:287:15: which caused the file to be included.                                                  
    deps += [ "//printing:printing_unittests" ]
              ^------------------------------
Traceback (most recent call last):                                                                            
  File "tools/gclient_hook.py", line 149, in <module>
    RunAction(src_dir, cmd)
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/cef/tools/gclient_util.py", line 36, in RunAction
    command, cwd=dir, always_show_header=True, print_stdout=True)
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/depot_tools/gclient_utils.py", line 716, in CheckCallAndFilter
    rv, args, kwargs.get('cwd', None), command_output.getvalue(), None)
subprocess2.CalledProcessError: Command 'gn gen out/Debug_GN_x64' returned non-zero exit status 1 in /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src
ERROR at dynamically parsed input that //printing/BUILD.gn:464:16 loaded :1:1: Invalid token in literal value
-------------------------------------
^
See //BUILD.gn:287:15: which caused the file to be included.                                                  
    deps += [ "//printing:printing_unittests" ]
              ^------------------------------

缺失库,安装libcups2-dev库即可

sudo apt install libcups2-dev
Package glib-2.0 was not found in the pkg-config search path
ERROR at //build/config/linux/pkg_config.gni:104:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "value")
                ^----------
Current dir: /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/out/Debug_GN_x64/
Command: python3 /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/build/config/linux/pkg-config.py glib-2.0
Returned 1.
stderr:

Package glib-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glib-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glib-2.0' found
Could not run pkg-config.

See //cef/BUILD.gn:2090:5: whence it was called.
    pkg_config("glib") {
    ^-------------------
See //BUILD.gn:283:15: which caused the file to be included.                                                  
    deps += [ "//cef" ]
              ^------
Traceback (most recent call last):                                                                            
  File "tools/gclient_hook.py", line 149, in <module>
    RunAction(src_dir, cmd)
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/cef/tools/gclient_util.py", line 36, in RunAction
    command, cwd=dir, always_show_header=True, print_stdout=True)
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/depot_tools/gclient_utils.py", line 716, in CheckCallAndFilter
    rv, args, kwargs.get('cwd', None), command_output.getvalue(), None)
subprocess2.CalledProcessError: Command 'gn gen out/Debug_GN_x64' returned non-zero exit status 1 in /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src
ERROR at //build/config/linux/pkg_config.gni:104:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "value")
                ^----------
Current dir: /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/out/Debug_GN_x64/
Command: python3 /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/build/config/linux/pkg-config.py glib-2.0
Returned 1.
stderr:

Package glib-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glib-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glib-2.0' found
Could not run pkg-config.

See //cef/BUILD.gn:2090:5: whence it was called.
    pkg_config("glib") {
    ^-------------------
See //BUILD.gn:283:15: which caused the file to be included.                                                  
    deps += [ "//cef" ]

安装

sudo apt install libglib2.0-dev
Package gnome-keyring-1 was not found in the pkg-config search path.
ERROR at //build/config/linux/pkg_config.gni:104:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "value")
                ^----------
Current dir: /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/out/Debug_GN_x64/
Command: python3 /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/build/config/linux/pkg-config.py gnome-keyring-1
Returned 1.
stderr:

Package gnome-keyring-1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gnome-keyring-1.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gnome-keyring-1' found
Could not run pkg-config.

这里就是前面提到的需要将use_gnome_keyring设置为false禁用掉。

终端输入,将其禁用

export GN_DEFINES="use_sysroot=true symbol_level=1 is_cfi=false use_thin_lto=false use_vaapi=false ffmpeg_branding=Chrome proprietary_codecs=true is_official_build=true use_gnome_keyring=false chrome_pgo_phase=0"
Package dbus-1 was not found in the pkg-config search path
ERROR at //build/config/linux/pkg_config.gni:104:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "value")
                ^----------
Current dir: /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/out/Debug_GN_x64/
Command: python3 /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/build/config/linux/pkg-config.py dbus-1
Returned 1.
stderr:

Package dbus-1 was not found in the pkg-config search path.
Perhaps you should add the directory containing `dbus-1.pc'
to the PKG_CONFIG_PATH environment variable
No package 'dbus-1' found
Could not run pkg-config.

安装

sudo apt install libdbus-1-dev
Package nss was not found in the pkg-config search path
ERROR at //build/config/linux/pkg_config.gni:104:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "value")
                ^----------
Current dir: /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/out/Debug_GN_x64/
Command: python3 /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/build/config/linux/pkg-config.py nss -v -lssl3
Returned 1.
stderr:

Package nss was not found in the pkg-config search path.
Perhaps you should add the directory containing `nss.pc'
to the PKG_CONFIG_PATH environment variable
No package 'nss' found
Could not run pkg-config.

安装

sudo apt install libnss3-dev
Package libva was not found in the pkg-config search path
ERROR at //build/config/linux/pkg_config.gni:104:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "value")
                ^----------
Current dir: /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/out/Debug_GN_x64/
Command: python3 /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/build/config/linux/pkg-config.py libva
Returned 1.
stderr:

Package libva was not found in the pkg-config search path.
Perhaps you should add the directory containing `libva.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libva' found
Could not run pkg-config.

安装

sudo apt install libva-dev
Package gbm was not found in the pkg-config search path
ERROR at //build/config/linux/pkg_config.gni:104:17: Script returned non-zero exit code.
    pkgresult = exec_script(pkg_config_script, args, "value")
                ^----------
Current dir: /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/out/Debug_GN_x64/
Command: python3 /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/build/config/linux/pkg-config.py gbm
Returned 1.
stderr:

Package gbm was not found in the pkg-config search path.
Perhaps you should add the directory containing `gbm.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gbm' found
Could not run pkg-config.
sudo apt install libgbm-dev
run “gclient runhooks” to download it. You can also simply disable the PGO optimizations by setting |chrome_pgo_phase = 0| in your GN arguments

即pgo文件问题

ERROR at //build/config/compiler/pgo/BUILD.gn:81:23: Script returned non-zero exit code.
      pgo_data_path = exec_script("//tools/update_pgo_profiles.py",
                      ^----------
Current dir: /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/out/Release_GN_x64/
Command: python3 /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/tools/update_pgo_profiles.py --target linux get_profile_path
Returned 1.
stderr:

Traceback (most recent call last):
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/tools/update_pgo_profiles.py", line 154, in <module>
    sys.exit(main())
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/tools/update_pgo_profiles.py", line 150, in main
    return args.func(args)
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/tools/update_pgo_profiles.py", line 122, in _get_profile_path
    profile_path)
RuntimeError: requested profile "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/chrome/build/pgo_profiles/chrome-linux-5672-1683023364-b47f9a07c616c94cac9f564aa6b00a8aaaec191a.profdata" doesn't exist, please make sure "checkout_pgo_profiles" is set to True in the "custom_vars" section of your .gclient file, e.g.: 
solutions = [ 
  { 
    "name": "src", 
    # ...  
    "custom_vars": { 
      "checkout_pgo_profiles": True, 
    }, 
  }, 
], 
and then run "gclient runhooks" to download it. You can also simply disable the PGO optimizations by setting |chrome_pgo_phase = 0| in your GN arguments.

See //build/config/BUILDCONFIG.gn:352:3: which caused the file to be included.
  "//build/config/compiler/pgo:default_pgo_flags",

尝试了下载pgo文件,但失败,于是将其chrome_pgo_phase禁用

export GN_DEFINES="use_sysroot=false symbol_level=1 is_cfi=false use_thin_lto=false use_vaapi=false ffmpeg_branding=Chrome proprietary_codecs=true is_official_build=true use_gnome_keyring=false chrome_pgo_phase=0"

若还是提示此错误,则可修改chromium_git/chromium/src/build/config/compiler/pgo/pgo.gni文件,最后的位置处加上chrome_pgo_phase = 0

  chrome_pgo_phase = 0
  if (!dcheck_always_on && is_official_build &&
      # TODO(crbug.com/1052397): Remove chromeos_is_browser_only once
      # target_os switch for lacros-chrome is completed.
      # TODO(crbug.com/1336055): Update this now-outdated condition with regard
      # to chromecast and determine whether chromeos_is_browser_only is
      # obsolete.
      (is_high_end_android || is_win || is_mac || is_fuchsia ||
       (is_linux && !is_castos && !chromeos_is_browser_only))) {
    chrome_pgo_phase = 2
  }
# 手动添加
  chrome_pgo_phase = 0
  # When using chrome_pgo_phase = 2, read profile data from this path.
  pgo_data_path = ""
}

当问题都解决后,就可以开始编译源码了。

开始编译

code/chromium_git/chromium/src路径下

# debug lib
ninja -C out/Debug_GN_x64 cefclient cefsimple ceftests chrome_sandbox
# release lib
ninja -C out/Release_GN_x64 cefclient cefsimple ceftests chrome_sandbox

这里直接执行的第二条命令

在编译过程中,也会出现错误,不过好在是增量编译,报错不会影响已经编译好的产物。

问题处理
gperf错误
sudo apt install gperf
No module named ‘importlib_metadata’
Traceback (most recent call last):
  File "../../third_party/blink/renderer/bindings/scripts/generate_bindings.py", line 12, in <module>
    import bind_gen
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/third_party/blink/renderer/bindings/scripts/bind_gen/__init__.py", line 36, in <module>
    from .callback_function import generate_callback_functions
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/third_party/blink/renderer/bindings/scripts/bind_gen/callback_function.py", line 8, in <module>
    from .blink_v8_bridge import blink_class_name
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/third_party/blink/renderer/bindings/scripts/bind_gen/blink_v8_bridge.py", line 8, in <module>
    from .code_node import FormatNode
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/third_party/blink/renderer/bindings/scripts/bind_gen/code_node.py", line 13, in <module>
    from .mako_renderer import MakoRenderer
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/third_party/blink/renderer/bindings/scripts/bind_gen/mako_renderer.py", line 7, in <module>
    import mako.runtime
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/third_party/mako/mako/mako/runtime.py", line 14, in <module>
    from mako import compat
  File "/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/third_party/mako/mako/mako/compat.py", line 68, in <module>
    import importlib_metadata  # noqa
ModuleNotFoundError: No module named 'importlib_metadata'
[559/47120] CXX obj/v8/cppgc_base/heap-consistency.o
ninja: build stopped: subcommand failed.

这个错误提示是最明显的了,安装python的importlib_metadata库即可

pip3 install importlib_metadata

如果pip命令未找到,那么先安装pip再执行上面的命令

sudo apt install python3-pip
fatal error: ‘pulse/pulseaudio.h’ file not found
gen/media/audio/pulse/pulse_stubs.cc:17:10: fatal error: 'pulse/pulseaudio.h' file not found
#include <pulse/pulseaudio.h>
         ^~~~~~~~~~~~~~~~~~~~
1 error generated.                                                                                            
[6644/46562] CXX obj/extensions/common/api/generated_api_types/networking_private.o
ninja: build stopped: subcommand failed.
sudo apt install libpulse-dev 
fatal error: ‘curl/curl.h’ file not found
../../third_party/crashpad/crashpad/util/net/http_transport_libcurl.cc:17:10: fatal error: 'curl/curl.h' file not found
#include <curl/curl.h>
         ^~~~~~~~~~~~~
1 error generated.                                                                                            
[845/39891] CXX obj/third_party/crashpad/crashpad/util/util/metrics.o
ninja: build stopped: subcommand failed.
sudo apt install libcurl4-openssl-dev
fatal error: ‘pci/pci.h’ file not found
../../third_party/angle/src/gpu_info_util/SystemInfo_libpci.cpp:12:10: fatal error: 'pci/pci.h' file not found
#include <pci/pci.h>
         ^~~~~~~~~~~
1 error generated.                                                                                            
[3735/39047] CXX obj/third_party/vulkan-deps/vulkan-validation-layers/src/VkLayer_khronos_validation/chassis.o
ninja: build stopped: subcommand failed.
sudo apt install libpci-dev
fatal error: ‘alsa/asoundlib.h’ file not found
../../media/midi/midi_manager_alsa.h:8:10: fatal error: 'alsa/asoundlib.h' file not found
#include <alsa/asoundlib.h>
         ^~~~~~~~~~~~~~~~~~
1 error generated.                                                                                            
[4066/35313] CXX obj/media/mojo/mojom/speech_recognition/speech_recognition.mojom.o
ninja: build stopped: subcommand failed.
sudo apt install libasound2-dev
fatal error: ‘gssapi.h’ file not found
../../net/http/http_auth_gssapi_posix.h:26:10: fatal error: 'gssapi.h' file not found
#include <gssapi.h>
         ^~~~~~~~~~
1 error generated.                                                                                            
[483/31248] CXX obj/net/net/http_cache_transaction.o
ninja: build stopped: subcommand failed.
 sudo apt install libkrb5-dev

当编译完成时,终端显示内容:

Leou@Leou-PC:/media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src$ ninja -C out/Debug_GN_x64 cefclient cefsimple ceftests chrome_sandbox
ninja: Entering directory `out/Debug_GN_x64'
[57156/57156] LINK ./ceftests

生成CEF二进制分发包

记得选上--x64-build,否则默认为x86,会提示找不到头文件。生成的路径为/code/chromium_git/chromium/src/cef/binary_districhromium/src/cef/binary_distrib,会默认打包为zip压缩包

code/chromium_git/chromium/src/cef/tools$
# 打包Release
./make_distrib.sh --ninja-build --minimal --x64-build

生成的包名:
cef_binary_113.3.5+g0b33855+chromium-113.0.5672.129_linux64_minimal

# 同时打包Debug和Release
./make_distrib.sh --ninja-build --x64-build

生成的包名:

cef_binary_113.3.5+g0b33855+chromium-113.0.5672.129_linux64

ERROR: Please install Doxygen
ERROR: No docs generated.
Traceback (most recent call last):
  File "make_distrib.py", line 1251, in <module>
    copy_files_list(build_dir, dst_dir, binaries)
  File "make_distrib.py", line 325, in copy_files_list
    raise Exception('Missing required path: %s' % source_path)
Exception: Missing required path: /media/Leou/53e0f2ac-c225-409c-ad9d-0cf8392c641f/code/chromium_git/chromium/src/out/Release_GN_x64/chrome_sandbox
sudo apt install doxygen

当然也可以禁用生成doc文档,就不需要安装了。

总结

由于是事后记录,出错的问题未记录解决方案难免有疏漏。我在下载、编译、生成的阶段中,都会出现很多问题,但总体而言,Linux平台的CEF源码编译还算比较顺畅。

https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart.md
https://zhuanlan.zhihu.com/p/133675543
https://keqingrong.cn/blog/2021-12-20-building-chromium-on-windows/
https://www.mycode.net.cn/language/cpp/2784.html文章来源地址https://www.toymoban.com/news/detail-633078.html

到了这里,关于Linux CEF(Chromium Embedded Framework)源码下载编译详细记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux内核源码下载地址及方式

    HTTP地址(https://www.kernel.org/pub/)提供了HTTP协议的下载方式,您可以使用浏览器或wget等工具下载内核源码。 GIT地址(https://git.kernel.org/)提供了Git协议的方式,您可以使用Git客户端工具克隆内核源码仓库。 RSYNC地址(rsync://rsync.kernel.org/pub/)提供了rsync协议的下载方式,您可以

    2024年02月03日
    浏览(55)
  • 国内镜像:极速下载编译WebRTC源码(For Android/Linux/IOS)(二十四)

    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏: Audio工程师进阶系列 【 原创干货持续更新中…… 】🚀 优质专栏: 多媒体系统工程师系列 【 原创干货持续更新中…… 】🚀 人生格言: 人生从来没有捷径

    2024年01月17日
    浏览(47)
  • Linux:tomcat (源码包安装)(官网下载-安装-启动-配置-等等等-----从入门到入土)

    Apache Tomcat®软件是一个开源实现 Jakarta Servlet、Jakarta Server Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta Annotations 和 Jakarta Authentication 规范。 这些规范是Jakarta EE平台的一部分。 Apache Tomcat软件是在开放和参与式中开发的。 环境,并在 Apache 许可证版本 2 下发布。这

    2024年02月10日
    浏览(41)
  • Linux学习之Ubuntu 20.04在github下载源码安装Openresty 1.19.3.1

    参考的博文:《在 Ubuntu 上使用源码安装 OpenResty》 《OpenResty 安装安装详解-Ubuntu》 《Linux学习之CentOS 7源码安装openresty》 https://openresty.org/en/download.html是官网下载网址,页面往下拉有下载的链接。 https://github.com/openresty/openresty 是github上的链接。 可以点击上图中 tags 进入有不同

    2024年02月11日
    浏览(43)
  • cefsharp120.2.70(cef120.2.7Chromium6099.234)升级测试及其他H264版本

    此版本cefsharp 120.2.70 (cef 120.2.7) 无重大更新,因官方仓库打不开,不知道具体更新内容,已测无异常。 支持H264推荐版本:V100,V109,V111,V119版本,其他V114,V115,V108,V107 支持win7最后版本v109.x 支持NET4.5.2最后版本v114.x 请关注收藏栏目进行交流,感谢您的支持 最低支持NET4.6.2 建议用

    2024年01月25日
    浏览(47)
  • git下载源码及环境搭建下载源码之后端(一)

    下载源码 使用 windows + R 使用cmd调用命令框下载gitee云上面的 源码文件 输入命令: Git clone (此处拼接gitee源代码 地址) 若使用 git 命令 clone 项目时 我们需要在系统变量中进行配置,配置流程如下所示: 计算机—右键—属性–高级系统设置—高级–环境变量—系统变量–p

    2024年02月16日
    浏览(44)
  • Linux 编译CEF源码详细记录

    Linux CEF(Chromium Embedded Framework)源码下载编译 由于CEF默认的二进制分发包不支持音视频播放,需要自行编译源码,将ffmpeg开关打开才能支持。这里介绍的是Linux平台下的CEF源码下载编译过程。 Windows平台参考: 《Windows 编译CEF源码详细记录》 下载的过程非常艰辛,因为硬性要

    2024年02月13日
    浏览(39)
  • Android源码下载

        最近在做Monkey二次开发的工作,边弄边在这里记录下(多平台发布),顺便可以和大家一起讨论下;  Monkey的编译依赖于Android源码,所以要修改Monkey后打新jar包,需要完整的Android源码环境。         整理了下Android源码的下载流程;         参考文档:source.downloadin

    2024年02月07日
    浏览(49)
  • 易支付源码最新版开源开发搭建附源码下载

    预计到2024年,全球电子商务销售额将达到6万亿美元,零售商将实体店转移到网上从未像现在这样容易。商家可以建立自己的网站,在网上列出他们的实体产品,完成支付并发展他们的业务,甚至不用离开沙发。现在,数字化转型已经从店面扩展到产品本身。 不管你是否意识

    2024年04月11日
    浏览(35)
  • uboot源码下载以及编译

    环境:ubuntu 20.04 uboot官网在进入之后如下所示: 我们可以直接选择Obtaining the source进入到获取源码的网址 在点击Obtaining the source进入到新的网址之后就会看到下面提示去获取uboot的源码: The source of the U-Boot project is maintained in a Git repository. You can download the source via A mirror of th

    2024年02月02日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包