基于 LLVM 的 Go 编译器,面向微控制器、WebAssembly 和命令行工具。
xgo-dev/llgo
基于 LLVM 的 Go 编译器,可让 Go 代码直接调用 C 库并导入 Python 库。
- Star
- 845
- Fork
- 53
- 未关闭 Issue
- 197
- 最近提交
- 2小时前
这是什么?
LLGo 是一个基于 LLVM 的 Go 编译器,旨在让 Go 与 C ABI 生态打通,包括 C/C++、Python 以及其他暴露 C 兼容接口的语言。它在源码层面兼容 Go,是 XGo 项目的子项目。
LLGo 不依赖 cgo,而是通过 go:linkname 将 Go 声明直接绑定到 C 符号,调用 C 函数编译为原生调用,不经过 Go 到 C 的栈或调度切换。项目提供了 SQLite、zlib、libuv、OpenSSL、raylib 等 C 库的绑定,并能通过 llpyg 工具导入 NumPy、PyTorch 等 Python 库。默认运行时采用原生 goroutine 映射到系统线程,垃圾回收使用 BDWGC。
编译器支持 Linux、macOS、Windows 原生平台,并提供 WebAssembly 和嵌入式目标。构建和运行程序需要 LLVM 22、Clang 22 和 LLD。
核心功能
- 01通过 go:linkname 直接调用 C 函数,无需 cgo 开销。
- 02借助生成的绑定导入 NumPy、PyTorch 等 Python 库。
- 03兼容 Go 1.20 及以上源码,并支持 cgo。
- 04提供 C/C++ 标准库及多个常用 C 库的绑定。
- 05支持 Linux、macOS、Windows 原生平台,以及 WebAssembly 和嵌入式目标。
适用场景
- 在 Go 代码中直接调用 SQLite、raylib 等现有 C 库。
- 在 Go 程序中使用 NumPy、PyTorch 等 Python 科学计算库。
- 为 WebAssembly 或嵌入式单片机板卡构建 Go 程序。
- 探索通过 LLVM 编译 Go 以对接 C 生态。
快速上手
- 1
按照 README 中的安装说明安装 llgo
- 2
在示例目录(如 _demo/c/hello)中运行示例
llgo run .
使用前须知
- WebAssembly 和嵌入式等其他目标可能不提供全部操作系统服务或运行时行为。
- pandas、PyTorch 等第三方 Python 库需要单独安装。
- C 和 C++ 绑定目前由人工维护,库的覆盖范围有限。
- 通过提升方法包装器转发 C 可变参数调用,仅支持托管的原生目标。
标签
常见问题
- llgo 是什么?
- 基于 LLVM 的 Go 编译器,可让 Go 代码直接调用 C 库并导入 Python 库。 LLGo 是一个基于 LLVM 的 Go 编译器,旨在让 Go 与 C ABI 生态打通,包括 C/C++、Python 以及其他暴露 C 兼容接口的语言。它在源码层面兼容 Go,是 XGo 项目的子项目。
- llgo 可以免费使用吗?用的什么许可证?
- llgo 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
- llgo 还在维护吗?
- 活跃维护中。llgo 最近一次提交是在 2026年10月22日。
- llgo 适合用来做什么?
- 在 Go 代码中直接调用 SQLite、raylib 等现有 C 库。 在 Go 程序中使用 NumPy、PyTorch 等 Python 科学计算库。 为 WebAssembly 或嵌入式单片机板卡构建 Go 程序。 探索通过 LLVM 编译 Go 以对接 C 生态。
- llgo 怎么安装和运行?
- 按照 README 中的安装说明安装 llgo 在示例目录(如 _demo/c/hello)中运行示例: llgo run .
- 在哪里获取 llgo?
- 源代码和安装说明在 GitHub 上:https://github.com/xgo-dev/llgo
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
将 C 和 C++ 代码编译为 WebAssembly,使其可在浏览器、Node.js 等环境运行的编译工具链。
模块化的编译器与工具链技术集合,包含 LLVM 核心、Clang 前端、libc++ 标准库和 LLD 链接器。
JetBrains 开发的 Kotlin 编程语言,包含编译器、标准库及构建工具,支持多平台开发。
一种类 TypeScript 的语言及编译器,可将带类型的 TypeScript 变体编译为 WebAssembly 模块。