lua官方版本下载地址

Lua 5.3 Lua 5.3 于2015年1月12日发行。 其主要新功能包括 整数, 按位算子, 一个基础的UTF-8库, 并支持64位和32位平台。

最后一个版本是Lua 5.3.6, 于2020年9月25日发行。 Lua 5.3将不再发布。

环境:Visual Studio,已安装 x86生成工具

1.源码准备

1.下载官方源码 lua‑5.3.6.tar.gz,官网获取,不要修改源码文件 2.解压到纯英文路径,例:D:\lua536 源码目录内部文件列表:src文件夹、doc、Makefile等

2.VS新建空项目

1.新建 → 空项目(Visual C++),项目名lua53,解决方案名lua53_sln 2.解决方案平台:顶部下拉 → x86(重点,不要x64;没有x86就去VS安装器添加“桌面开发使用C++”组件,勾选x86工具) 3.配置选:Release

3.添加源文件

项目右键 → 添加现有项,把D:\lua536\src\下这些.c全部加入项目:

lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c lutf8lib.c loadlib.c linit.c

lua.c、luac.c 不要加入到此dll项目

4.项目属性(Release|x86,必须确认窗口顶部是Release+x86)

项目右键 → 属性

4‑1 C/C++ → 常规

附加包含目录:D:\lua536\src

4‑2 C/C++ → 预处理器 → 预处理器定义

填入:

LUA_BUILD_AS_DLL;_CRT_SECURE_NO_WARNINGS

4‑3 C/C++ → 代码生成

运行库:多线程DLL (/MD)

4‑4 链接器 → 常规

输出文件:$(OutDir)lua53.dll

4‑5 链接器 → 系统

子系统:Windows (/SUBSYSTEM:WINDOWS)

4‑6 链接器 → 高级

目标计算机:MachineX86 (/MACHINE:X86)

4‑7 项目属性 → 常规

配置类型:动态库(.dll)

保存全部属性。

5.编译DLL

1.删除旧输出目录(x86\Release整个文件夹删掉) 2.生成 → 重新生成解决方案 输出产物:x86\Release\lua53.dlllua53.lib

6.编译lua.exe解释器(单独新建项目)

同解决方案下,新建另一个空项目,名字lua_exe 配置:Release|x86 1.添加现有项:上面全部.c源码 再加 lua.c,luac.c依旧不要加 2.属性:

  • C/C++预处理器:_CRT_SECURE_NO_WARNINGS不要写LUA_BUILD_AS_DLL
  • 配置类型:应用程序(.exe)
  • 运行库:/MD
  • 链接器→高级:/MACHINE:X86 3.重新生成,得到lua_exe\x86\Release\lua53.exe

7.校验(使用x86 Native Tools Command Prompt for VS)

cd到输出目录

dumpbin /HEADERS lua53.dll

必须看到:14C machine (x86)

dumpbin /EXPORTS lua53.dll

输出列表要有大量 lua_luaL_ 导出函数。

lua53.exe -v

输出Lua 5.3.6即全部编译成功。

关键点汇总 1.全程平台锁定x86 Release 2.dll项目定义LUA_BUILD_AS_DLL;exe项目不能带这个宏 3.dll不要加lua.c;exe项目才加lua.c 4.运行库统一/MD,不要用MT 5.必须用x86工具链dumpbin校验机器码与导出表。

=============##补全属性===================

当前配置:Release | Win32(就是x86 32位,平台是对的),配置类型:动态库(.dll) ✔

接下来逐项补全属性

  1. C/C++ → 常规 附加包含目录:D:\lua536\src(改成你实际的lua src路径)

  2. C/C++ → 预处理器 → 预处理器定义

    LUA_BUILD_AS_DLL;_CRT_SECURE_NO_WARNINGS
  3. C/C++ → 代码生成 运行库:多线程DLL (/MD)

  4. 链接器 → 高级 目标计算机:MachineX86 (/MACHINE:X86)

  5. 链接器 → 系统 子系统:Windows (/SUBSYSTEM:WINDOWS)

点击应用保存。

确认源码列表

dll项目src下加入全部c文件,排除 lua.c、luac.c

编译前强制清理

1.关闭属性页; 2.在解决方案资源管理器,项目右键 →【清理】; 3.手动删除整个输出文件夹(Release目录全部删掉,不要留旧obj/dll); 4.项目右键 →【重新生成】。

编译完成后校验(x86 VS命令提示符)

dumpbin /HEADERS lua536.dll

必须看到 14C machine (x86)

dumpbin /EXPORTS lua536.dll

出现大量 lua_luaL_ 导出函数才算成功。

注意:项目名是 lua536,输出dll名字就是 lua536.dll