▒ 目录 ▒
🛫 导读
环境
| 版本号 | 描述 | |
|---|---|---|
| 文章日期 | 2025-09-17 | |
| 操作系统 | Win11 - 24H2 | 26110.4061 |
| VS | 2022 | |
| Lua | 5.1.5 | 小编要分析某游戏的环境为5.1.5 |
| arch | x86 | 小编要分析某游戏的环境为x86 |
| libffi | 9f2acc9 | |
| python | 3.9.9 | 小编使用的meson基于python环境 |
| meson | 16.2.1 | |
| ninja | vs自带的 | |
需求
cffi-lua 是基于
libffi的跨平台 Lua FFI 库,核心价值是为标准 Lua(5.1+,非 LuaJIT) 提供便捷的 C 库调用能力,且兼容 Windows 系统。在 Windows 开发中,常需解决“标准 Lua 调用系统 API/C 库”的需求(如硬件接口、高性能计算),而 cffi-lua 可替代传统 C 扩展模块(无需手动编译 DLL),通过动态绑定实现快速集成。本文聚焦 Windows 环境,详细讲解 cffi-lua 的依赖准备、MSVC环境编译、安装配置及测试流程,解决 Windows 下“依赖缺失”“编译位数不匹配”“库链接失败”等常见问题。
1️⃣ Windows下cffi-lua基础认知
需先明确 cffi-lua 在 Windows 下的核心特性与依赖,为后续操作铺垫。
1.1 核心特性(Windows适配)
- 兼容性:支持标准 Lua 5.1~5.4 ,无需修改代码即可在不同 Lua 版本间迁移;
- 跨架构:适配 Windows x86(32位)、x64(64位)架构,需确保编译产物与 Lua 位数一致;
- 调用约定:自动处理 Windows 特有调用约定(如 x86 的
stdcall),无需手动声明; - libffi 集成:支持手动提供
libffi或通过 meson 子项目自动拉取(解决 Windows 下libffi安装难问题)。
1.2 必备依赖(Windows环境)
| 依赖项 | 说明 | 推荐版本 |
|---|---|---|
| C++ 编译器 | 需支持 C++14,可选 MSVC 或 MinGW(二选一) | VS2017+ / MinGW-w64 8.0+ |
| Lua 环境 | 标准 Lua 5.1~5.4(需包含头文件、导入库 .lib、动态库 .dll) |
Lua 5.4.6 |
| libffi | 外部函数调用库,可选“手动提供”或“meson 自动拉取” | libffi 3.4.4+ |
| meson | 构建工具,用于生成编译配置(替代 Makefile) | meson 1.2.0+ |
| ninja | 编译执行工具,配合 meson 高效编译 | ninja 1.11.1+ |
依赖安装提示:
meson:通过python安装:
pip install mesonninja:直接使用VS自带的(或vcpkg安装的)即可
- D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe
Lua:从 Lua 官网 下载 Windows 源码编译(需生成
.lib和.dll);或者直接在sourceforge下载用对应编译器编译,或使用 LuaForWindows 预编译包。
ps: meson/ninja:也可以通过 Chocolatey 安装(choco install meson ninja),或直接下载 预编译包 并添加到系统 PATH;
2️⃣ Windows下编译指南(MSVC环境)
Windows 下 cffi-lua 支持两种主流编译环境:MSVC(Visual Studio 工具链)和 MinGW(类 Unix 工具链),我们这里选择MSVC环境。
2.1 步骤1:准备依赖文件(关键!)
需将 Lua (使用前文中提到的下载好的压缩包lua-5.1.5_Win32_vc17_lib.zip)和 libffi (小编未处理libffi库,由meson自动拉取)的文件按约定放入 deps 目录(解决 meson 自动查找问题),目录结构如下:
cffi-lua源码根目录/
├─ deps/ # 依赖存放目录(手动创建)
│ ├─ include/ # 头文件目录
│ │ ├─ lua.h # Lua 头文件(来自 Lua 安装目录的 include 文件夹)
│ │ ├─ lua.hpp
│ │ ├─ lauxlib.h
│ │ ├─ lauconf.h
│ │ ├─ laulib.h
│ │ ├─ ffi.h # libffi 头文件(可选,不提供则 meson 自动拉取)
│ │ └─ ffitarget.h # libffi 头文件(可选,不提供则 meson 自动拉取)
│ ├─ lua5.1.lib # Lua 导入库(32/64位需与编译目标一致)
│ ├─ lua5.1.dll # Lua 动态库
│ └─ lua.exe # Lua 可执行文件(用于后续测试)
└─ build/ # 编译输出目录(编译过程自动创建)

说明:若不提供
libffi头文件和库,meson 会自动下载libffi子项目并静态链接,无


560

被折叠的 条评论
为什么被折叠?



