You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下Xilium.CefGlue.Avalonia加载libcef及子进程失败求助

Linux下运行Xilium.CefGlue.Avalonia浏览器的依赖问题解决指南

问题描述

已按Avalonia官方文档创建项目,Windows下可正常运行,但Linux中创建AvaloniaCefBrowser实例后无法启动:

  1. 首次抛出libcef加载失败错误:
Unhandled exception. System.DllNotFoundException: Unable to load shared library 'libcef' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibcef: cannot open shared object file: No such file or directory
   at Xilium.CefGlue.Interop.libcef.api_hash(Int32 entry)
   ...
  1. 将对应版本CEF二进制文件中的libcef.so复制到项目bin目录后,出现子进程找不到的错误:
Unhandled exception. System.IO.FileNotFoundException: Unable to find SubProcess. Probed locations: /home/cdejon/Dokumente/AvaloniaLinux/bin/Debug/net6.0/Xilium.CefGlue.BrowserProcess
/home/cdejon/Dokumente/AvaloniaLinux/bin/Debug/net6.0/CefGlueBrowserProcess/Xilium.CefGlue.BrowserProcess
/home/cdejon/Dokumente/AvaloniaLinux/bin/Debug/net6.0/Xilium.CefGlue.BrowserProcess
/home/cdejon/Dokumente/AvaloniaLinux/bin/Debug/net6.0/CefGlueBrowserProcess/Xilium.CefGlue.BrowserProcess
   at Xilium.CefGlue.Common.CefRuntimeLoader.InternalInitialize(CefSettings settings, KeyValuePair`2[] flags, CustomScheme[] customSchemes, BrowserProcessHandler browserProcessHandler)
   at Xilium.CefGlue.Common.CefRuntimeLoader.Load(BrowserProcessHandler browserProcessHandler)
   at Xilium.CefGlue.Common.BaseCefBrowser..ctor()
   at Xilium.CefGlue.Avalonia.AvaloniaCefBrowser..ctor()
   at AvaloniaLinux.MainWindow..ctor() in /home/cdejon/Dokumente/AvaloniaLinux/MainWindow.axaml.cs:line 11
   at AvaloniaLinux.App.OnFrameworkInitializationCompleted() in /home/cdejon/Dokumente/AvaloniaLinux/App.axaml.cs:line 18
   at Avalonia.Controls.AppBuilderBase`1.Setup() in /_/src/Avalonia.Controls/AppBuilderBase.cs:line 312
   at Avalonia.Controls.AppBuilderBase`1.SetupWithLifetime(IApplicationLifetime lifetime) in /_/src/Avalonia.Controls/AppBuilderBase.cs:line 179
   at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime[T](T builder, String[] args, ShutdownMode shutdownMode) in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 208
   at AvaloniaLinux.Program.Main(String[] args) in /home/cdejon/Dokumente/AvaloniaLinux/Program.cs:line 12

解决方案

1. 完整部署CEF依赖文件

不要只复制libcef.so,需将CEF二进制包中的所有文件(包括lib目录下的所有.so文件、chrome-sandbox、subprocess等)复制到项目输出目录(如bin/Debug/net6.0/)。CEF运行依赖整套环境,单个文件无法满足需求。

2. 匹配子进程名称

Xilium.CefGlue默认查找Xilium.CefGlue.BrowserProcess子进程,按以下方式处理:

  • 确认项目已安装与Xilium.CefGlue.Avalonia版本一致的Xilium.CefGlue.BrowserProcess NuGet包;
  • 若手动部署,将CEF包中的subprocess重命名为Xilium.CefGlue.BrowserProcess,放到输出目录。

3. 配置库加载路径

Linux中可通过两种方式确保系统找到依赖库:

  • 启动程序前设置环境变量:
    export LD_LIBRARY_PATH=/home/cdejon/Dokumente/AvaloniaLinux/bin/Debug/net6.0/:$LD_LIBRARY_PATH
    ./AvaloniaLinux
    
  • 代码中初始化CEF时指定路径(需在创建AvaloniaCefBrowser前执行):
    var settings = new CefSettings();
    settings.BrowserSubprocessPath = Path.Combine(AppContext.BaseDirectory, "Xilium.CefGlue.BrowserProcess");
    settings.LibCefPath = Path.Combine(AppContext.BaseDirectory, "libcef.so");
    CefRuntimeLoader.Load(settings, null);
    

4. 安装系统依赖库

CEF在Linux下依赖基础系统库,以Debian/Ubuntu为例,执行以下命令安装:

sudo apt-get install libgtk-3-0 libnss3 libatk-bridge2.0-0 libx11-xcb1 libxcb-dri3-0 libdrm2 libgbm1 libasound2

内容的提问来源于stack exchange,提问作者Christ_K9999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:35:36