Skip to content

Bug: graphics 栈装好后 GLX 仍无 FBConfig —— vendor 库在 SubOS 里但 payload libGLX 够不到(且不能用 LD_LIBRARY_PATH 兜) #525

Description

@speak-agent

Bug: 装了 graphics 栈之后,GLX 程序仍拿不到 FBConfig —— vendor 库在 SubOS 里但 payload libGLX 够不到

现象

隔离 home(自己的 HOME/MCPP_HOME/XLINGS_HOME)里 xlings install -y graphics 成功:

[xim:xpkg]: graphics stack installed. On this host:
[xim:xpkg]:   NVIDIA proprietary driver 550.144.03 — GL renders on the GPU
  ✓ 35 package(s) installed

同一 home 里用 mcpp 构建一个 GLFW + OpenGL 程序(compat.glfw@3.4
compat.opengl@2026.05.31compat.glx-runtime@2026.08.08),在 DISPLAY=:1
(宿主 glxinfo -B 正常,direct rendering: Yes,NVIDIA 550.144.03)上运行:

GLFW_ERROR 65542: GLX: No GLXFBConfigs returned
GLFW_ERROR 65545: GLX: Failed to find a suitable GLXFBConfig

已经确认的部分

程序拿到的环境是对的——SubOS 的图形变量确实被应用了:

__EGL_VENDOR_LIBRARY_DIRS=[<subos>/share/glvnd/egl_vendor.d]
LIBGL_DRIVERS_PATH=[<subos>/usr/lib/dri]
__GLX_VENDOR_LIBRARY_NAME=[]
LD_LIBRARY_PATH=[<xpkgs>/compat-x-glx-runtime/2026.08.08/mcpp_generated/glx_runtime/lib]

GLX vendor 库也确实装好了

<subos>/lib/libGLX_nvidia.so.0
<subos>/lib/libGLX_nvidia.so.550.144.03
<subos>/lib/libGLX_mesa.so.0
<subos>/lib/libGLX.so.0

<subos>/share/glvnd/egl_vendor.d/10_nvidia.json 指向
<xpkgs>/xim-x-nvidia-gl-host-link/0.1.1/lib/libEGL_nvidia.so.0

缺口

SubOS 声明的是 EGL vendor 目录,没有任何东西让 GLX 侧的 vendor 库可达:
程序加载的 libGLX.so.0 来自 compat.glx-runtime payload,它在 dlopen
libGLX_nvidia.so.0 时只会查自己的 RUNPATH,而 <subos>/lib 不在里面。
__GLX_VENDOR_LIBRARY_NAME=nvidia 也没用——名字对了,库仍然找不到。

为什么不能用 LD_LIBRARY_PATH 兜

<subos>/lib 放进 LD_LIBRARY_PATH 会立刻杀死宿主二进制:

$ LD_LIBRARY_PATH=<subos>/lib timeout 600 mcpp run
timeout: symbol lookup error: <subos>/lib/libc.so.6:
         undefined symbol: __pointer_chk_guard, version GLIBC_PRIVATE

<subos>/lib 同时含私有 glibc,而 timeout宿主 loader 加载
(见 mcpp-community/mcpp#401)。

这恰好就是 xim 自己在安装时打印的那条警告说的事:

This variable can load code from our payload into processes we do not own,
including host binaries running under the host loader.
Prefer RPATH on the consumer; use this only where RPATH cannot reach.

建议方向

按同一条规则收口:让 compat.glx-runtimelibGLX.so.0 通过 RPATH
(而不是环境变量)够到 SubOS 的 GLX vendor 目录,或者由 graphics 栈提供一个
GLX 侧等价于 egl_vendor.d 的声明。

环境

  • xlings 2026.8.9.2,隔离 home(HOME/MCPP_HOME/XLINGS_HOME 全部指向临时目录)
  • mcpp 2026.8.10.1mcpp-community/mcpp#400
  • 宿主:X11 :1,NVIDIA 550.144.03,宿主 GL 正常

mcpp 侧的边界

mcpp 这边已核对无误:requirement / provider / provenance / link intent /
SubOS 图形环境 / post-link 闭包校验都正确并已存档,mcpp why runtime 直接读存档、
不重新探测宿主。按冻结的设计边界,driver/ICD 归 xlings/xim,所以这条报到这里。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions