Repolode
xgo-dev

xgo-dev/llgo

基于 LLVM 的 Go 编译器,可让 Go 代码直接调用 C 库并导入 Python 库。

Star
845
Fork
53
未关闭 Issue
197
最近提交
1小时前

这是什么?

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. 1

    按照 README 中的安装说明安装 llgo

  2. 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 数据每日更新。

相关项目