【lua】Windows环境下cffi-lua使用指南:编译、安装与测试

@[TOC]( ▒ 目录 ▒)

🛫 导读

环境

版本号 描述
文章日期 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 meson

  • ninja:直接使用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 子项目并静态链接,无

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值