
1. 为什么需要tolua热更新在Unity游戏开发中热更新是刚需功能。想象一下每次修复bug或调整数值都要重新打包发布玩家需要下载几百MB的安装包流失率会高得吓人。而使用Lua脚本实现热更新只需要下载几KB的脚本文件就能完成更新。tolua作为Unity最流行的Lua框架之一其核心是tolua runtime——用C编写的Lua虚拟机。这个虚拟机需要编译成不同平台的二进制文件Windows平台tolua.dllAndroid平台libtolua.soiOS平台libtolua.aMacOS平台tolua.bundle我遇到过不少开发者卡在编译环节明明照着教程操作却报错或者编译出来的库在真机上崩溃。本文将手把手带你用Windows电脑一次性搞定所有平台的编译包含我踩过的所有坑和解决方案。2. 环境准备MSYS2与工具链2.1 MSYS2安装与配置MSYS2是Windows下的Linux模拟环境我们用它来执行.sh编译脚本。安装时注意从 官网 下载64位安装包安装路径不要有中文和空格推荐C:\msys64安装完成后不要立即关闭窗口继续执行后续命令# 更新软件包数据库首次安装必须执行 pacman -Syu # 关闭窗口后重新打开继续更新 pacman -Su2.2 配置国内镜像源默认源在国外下载速度极慢。修改msys64\etc\pacman.d下的三个文件mirrorlist.mingw32取消注释中科大源mirrorlist.mingw64同上mirrorlist.msys添加Server http://mirrors.ustc.edu.cn/msys2/msys/$arch/2.3 安装编译工具链执行以下命令安装必备工具约占用1GB空间# 安装32位和64位编译工具 pacman -S mingw-w64-i686-gcc mingw-w64-x86_64-gcc # 安装make工具 pacman -S mingw-w64-i686-make mingw-w64-x86_64-make make常见报错若出现PGP签名无效先执行pacman-key --refresh-keys若仍失败修改msys64\etc\pacman.d\gnupg\gpg.conf添加密钥服务器地址。3. 编译Windows平台库3.1 下载tolua源码从GitHub克隆最新代码git clone https://github.com/topameng/tolua_runtime.git cd tolua_runtime3.2 编译64位版本打开msys64\mingw64.exe执行编译脚本sh build_win64.sh常见问题若报错inet_pton重复定义编辑luasocket/inet.h注释掉#define LUASOCKET_INET_PTON宏定义。编译成功后生成的tolua.dll位于Plugins/x86_64目录。3.3 编译32位版本打开msys64\mingw32.exe执行sh build_win32.sh生成的32位dll会输出到Plugins/x86。4. 编译Android平台库4.1 NDK环境配置下载 NDK r21e 注意新版本NDK会报错解压到不含空格的路径如D:\android-ndk-r21e修改以下文件的NDK路径build_arm.shbuild_x86.shbuild_arm64.shlink_arm64.bat4.2 编译ARMv7架构# 在mingw32中执行 sh build_arm.sh生成的libtolua.so位于Plugins/Android/libs/armeabi-v7a4.3 编译ARM64架构# 在mingw64中执行 sh build_arm64.sh输出路径为Plugins/Android/libs/arm64-v8a注意如果报错ndk-build not found检查脚本中是否补全了.cmd后缀如ndk-build.cmd5. 编译iOS与MacOS库虽然需要在Mac电脑上编译但我们可以通过Windows远程连接Mac完成操作。5.1 准备Mac环境安装Xcode命令行工具xcode-select --install克隆代码到Macgit clone https://github.com/topameng/tolua_runtime.git5.2 编译iOS库cd tolua_runtime sh build_ios.sh生成的libtolua.a位于Plugins/iOS5.3 编译MacOS库# 编译非JIT版本兼容性好 cd macnojit xcodebuild clean xcodebuild -configurationRelease cp -r build/Release/tolua.bundle ../Plugins/或者直接运行脚本sh build_osx.sh6. 常见问题排查指南问题1编译Android库时报错undefined reference to __android_log_print解决方案在Android.mk中添加LOCAL_LDLIBS : -llog问题2iOS真机运行崩溃检查是否同时编译了模拟器架构用lipo -info libtolua.a查看应该只包含armv7/arm64。问题3Lua脚本调用时报nil错误检查是否所有平台都使用了相同版本的tolua runtime混合使用不同版本会导致兼容性问题。7. 高级技巧集成lua-protobuf如果需要protobuf支持可以修改编译脚本集成lua-protobuf将pb.c和pb.h复制到tolua源码目录修改build_common.sh添加编译选项SRC_LIST$SRC_LIST pb.c在Lua中即可直接使用local protobuf require pb经过这些步骤你应该已经获得了所有平台的tolua库。记得不同平台的库要放到Unity对应的插件目录AndroidAssets/Plugins/AndroidiOSAssets/Plugins/iOSWindowsAssets/Plugins/x86和x86_64如果遇到任何问题可以检查我的GitHub仓库中的编译好的成品库作为参考。编译过程虽然繁琐但掌握后就能自由定制tolua的功能了。