Repolode
pg83

pg83/solo

一个 dlfcn 风格的 .so 加载器,让完全静态的 musl Linux 程序直接加载宿主机上基于 glibc 的 GPU 驱动(如 Vulkan ICD)。

Star
643
Fork
15
未关闭 Issue
15
最近提交
23天前

这是什么?

SoLo 解决的是一个具体的部署问题:完全静态链接 musl 的可执行文件通常无法 dlopen() 宿主机上已安装的 GPU 驱动共享库,而这些库一般基于 glibc 编译。SoLo 提供 dlfcn 风格的 API,底层是自研的 ELF 加载器(支持 x86-64 和 aarch64),并在进程已有的 musl 运行时之上实现了 glibc ABI 桥接层。最终产物仍是一个静态可执行文件,却能使用机器上已有的驱动。

仓库附带了一个端到端的 Vulkan 示例:静态程序加载宿主机未经修改的 Vulkan ICD,执行随仓库提供的计算着色器,并把结果写入 PNG。glibc 不会作为第二个 libc 加载,它的导入符号被映射到 musl 之上的适配层;尚未实现的函数会以桩函数形式存在,被调用时会报出符号和版本名并终止。C++ 异常、四种 TLS 模型和符号版本在两个世界之间也都有处理。

该项目仅支持 Linux,且只加载一次:dlclose 会返回成功但不会真正卸载镜像。项目在 CI 中加载 Debian 最常安装的 1000 个库包中的共享库,覆盖 x86-64 和 aarch64 两种架构。

核心功能

  • 01为完全静态链接的 musl 程序提供 dlfcn 风格的 dlopen/dlsym 接口。
  • 02内置面向 x86-64 和 aarch64 的 ELF 加载器。
  • 03将 glibc ABI 导入桥接到进程已有的 musl 运行时上。
  • 04无需容器或 AppImage 即可加载宿主机的 Vulkan ICD 驱动。
  • 05提供预编译的 Vulkan 示例程序,通过计算着色器生成 PNG。

适用场景

  • 分发需要调用宿主机 Vulkan 或 OpenGL 驱动的单一静态 Linux 可执行文件。
  • 在静态链接的 musl 应用中运行 GPU 计算或图形任务。
  • 在 musl 静态程序中加载 glibc 编译的共享库,而无需打包整个发行版。
  • 学习用户态 ELF 加载器和 glibc 到 musl ABI 桥接层的实现方式。

快速上手

  1. 1

    从发布页下载预编译的 Vulkan 演示程序

    curl -LO https://github.com/pg83/solo/releases/latest/download/vulkan-x86_64
  2. 2

    赋予该程序可执行权限

    chmod +x vulkan-x86_64
  3. 3

    运行演示程序,使用系统的 Vulkan 驱动生成 512x512 的 PNG 图片

    ./vulkan-x86_64 hello.png

使用前须知

  • 仅支持 Linux,且限于 x86-64 和 aarch64 架构。
  • 要运行 GPU 演示,需要系统已安装 Vulkan 驱动。
  • 这是一种较为小众的实验性方案,用于加载与 glibc 链接的系统库。

标签

常见问题

solo 是什么?
一个 dlfcn 风格的 .so 加载器,让完全静态的 musl Linux 程序直接加载宿主机上基于 glibc 的 GPU 驱动(如 Vulkan ICD)。 SoLo 解决的是一个具体的部署问题:完全静态链接 musl 的可执行文件通常无法 dlopen() 宿主机上已安装的 GPU 驱动共享库,而这些库一般基于 glibc 编译。SoLo 提供 dlfcn 风格的 API,底层是自研的 ELF 加载器(支持 x86-64 和 aarch64),并在进程已有的 musl 运行时之上实现了 glibc ABI 桥接层。最终产物仍是一个静态可执行文件,却能使用机器上已有的驱动。
solo 可以免费使用吗?用的什么许可证?
solo 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
solo 还在维护吗?
活跃维护中。solo 最近一次提交是在 2026年9月29日。
solo 适合用来做什么?
分发需要调用宿主机 Vulkan 或 OpenGL 驱动的单一静态 Linux 可执行文件。 在静态链接的 musl 应用中运行 GPU 计算或图形任务。 在 musl 静态程序中加载 glibc 编译的共享库,而无需打包整个发行版。 学习用户态 ELF 加载器和 glibc 到 musl ABI 桥接层的实现方式。
solo 怎么安装和运行?
从发布页下载预编译的 Vulkan 演示程序: curl -LO https://github.com/pg83/solo/releases/latest/download/vulkan-x86_64 赋予该程序可执行权限: chmod +x vulkan-x86_64 运行演示程序,使用系统的 Vulkan 驱动生成 512x512 的 PNG 图片: ./vulkan-x86_64 hello.png
在哪里获取 solo?
源代码和安装说明在 GitHub 上:https://github.com/pg83/solo

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目