必须源码编译安装,因包管理器提供的luajit版本过时(如ubuntu的2.0.5无ffi)、rhel默认不提供,且官方不维护发行版仓库包;需git克隆、装build-essential和libreadline-dev依赖、make验证后sudo make install,并正确设置luajit_lib=/usr/local/lib与luajit_inc=/usr/local/include/luajit-2.1。

luajit 包(比如 Ubuntu 的 apt install luajit)基本不可用:Ubuntu/Debian 的版本常年停留在 2.0.5,不带 FFI;CentOS/RHEL 甚至默认不提供。官方从不维护 distro 仓库包,因为 LuaJIT 构建强依赖本地工具链和 ABI,硬打包极易出错。
为什么不能用 apt/yum 直接装
运行 sudo apt install luajit 看似省事,但实际装出来的往往是 LuaJIT 2.0.5 或更老版本,luajit -e "print(jit.version)" 会报错或根本没 jit 模块;FFI 功能缺失、JIT 编译器不可用、与 OpenResty 或 luarocks 生态不兼容是常态。这不是配置问题,是二进制本身就没编译进这些特性。
必须源码编译:四步走清干净
- 克隆镜像仓库:
git clone https://gitcode.com/gh_mirrors/lu/LuaJIT && cd LuaJIT(官网原地址http://luajit.org/git/luajit-2.0.git在国内常超时) - 装依赖(缺一不可):
sudo apt install build-essential libreadline-dev(Ubuntu/Debian);sudo yum groupinstall "Development Tools" && sudo yum install readline-devel(RHEL/CentOS) - 先试编译:
make—— 不要直接sudo make install,先确认能否生成src/luajit可执行文件;若报cc: command not found或readline/readline.h: No such file or directory,说明依赖没装全 - 安装:
sudo make install(默认到/usr/local)
LUAJIT_LIB 和 LUAJIT_INC 必须设对
很多 C 扩展模块(比如用 luarocks install lua-resty-core 装的)在加载时会查这两个环境变量,漏设或路径错会导致 cannot open <module>: no such file or directory</module>。
正确设置:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
export LUAJIT_LIB=/usr/local/lib-
export LUAJIT_INC=/usr/local/include/luajit-2.1(注意是2.1,不是2.0,哪怕你编译的是 2.0.x 分支) - 加进
~/.bashrc并source ~/.bashrc - 验证:
luajit -e "print(jit.version)"应输出类似LuaJIT 2.1.0-beta3;若报error loading module 'jit',就是LUAJIT_LIB指向的目录里没有libluajit.so或符号链接不对
交叉编译或自定义路径时最容易卡住的地方
给 ARM 设备(如树莓派)交叉编译,核心不是“能不能编”,而是链接器找不到目标 libc 或汇编器不匹配。常见错误如 as: unrecognized option '--64' 或 cannot find crt1.o,本质是 CROSS 工具链路径或 HOST_CC 没对齐。
自定义安装路径(比如 make install PREFIX=$HOME/local)后,别忘了同步改环境变量:LUAJIT_LIB=$HOME/local/lib,LUAJIT_INC=$HOME/local/include/luajit-2.1,且确保 $HOME/local/bin 在 PATH 里。
真正麻烦的从来不是编译命令本身,而是环境变量和路径之间那几处隐式依赖——它们不报错,只静默失效。










