Linux下Xilium.CefGlue.Avalonia加载libcef及子进程失败求助
Linux下运行Xilium.CefGlue.Avalonia浏览器的依赖问题解决指南
问题描述
已按Avalonia官方文档创建项目,Windows下可正常运行,但Linux中创建AvaloniaCefBrowser实例后无法启动:
- 首次抛出
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) ...
- 将对应版本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.BrowserProcessNuGet包; - 若手动部署,将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
相关产品推荐
相关产品推荐

