xLua
xLua copied to clipboard
xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc.
背景:开发人员难以保证只对主线程执行的代码进行插桩,也难以保证在 xlua_set_hotfix_flag 的过程中时其他线程不执行到被插桩的代码。考虑到运行效率,加锁是不现实的。 做法:由于 xlua_set_hotfix_flag 的过程可以保证在单线程进行,在 xlua_set_hotfix_flag 时,保证其他线程可以安全执行 xlua_get_hotfix_flag 等方法是一种折中处理方式。 (1) xlua_hotfix_flags 和 DelegateBridge.DelegateBridgeList 的元素修改不是原子操作,需要避免xlua_get_hotfix_flag 返回 true 时 DelegateBridge.DelegateBridgeList[n] 取到NullReference。 (2) realloc(xlua_hotfix_flags, (idx + 1) * sizeof(int)) 执行后,原 xlua_hotfix_flags 内存空间已被释放,新申请的内存空间在之后才重新赋值给...
被坑一个晚上
第一 luajit_v2.1.16_newest_luajit.tgz 这个文件不是luajit编译出来的 第二 下载下来的xlua当前版本的xlua可编译x64,但是是不可加载的 XLua.LuaDLL.Lua.luaL.newstate() 就会出错 第三 用旧版的xlua在vs2022 是无法直接编译luajit的。会报 error C2065: “lj_lib_init_buffer_method”: 未声明的标识符 官方发布的文件是MinSize 模式发布出来的,自己编译要带参数不然编译出来的文件会比官方发布的 大 自己下载最新版本的luajit,然后执行xlua的编译指令,得到build_lj64工程,在vs中开启合格工程,修改luajit路径 增加自己的扩展库编译即可
exception thrown: RuntimeError: unreachable,RuntimeError: unreachable at ObjectTranslator__ctor_m4A6284488C037293944F344830A1B5D2075CEB2A (:wasm-function[38727]:0xdc17b3) at LuaEnv__ctor_m00A52F620439E3215C975B3ECF65F0751AFFE8FB (:wasm-function[40317]:0xe14590) at LuaComponent_Awake_mC52D1EBEE85D3101FF0A144BB470639E1378FC47 (:wasm-function[118913]:0x2977dc4) at RuntimeInvoker_TrueVoid_t4861ACF8F4594C3437BB48B6E56783494B843915(void (*)(), MethodInfo const*, void*, void**, void*) (:wasm-function[90317]:0x258a025) at il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) (:wasm-function[12242]:0x3d2c8b) at...
exception thrown: RuntimeError: unreachable,RuntimeError: unreachable at ObjectTranslator__ctor_m4A6284488C037293944F344830A1B5D2075CEB2A (:wasm-function[38727]:0xdc17b3) at LuaEnv__ctor_m00A52F620439E3215C975B3ECF65F0751AFFE8FB (:wasm-function[40317]:0xe14590) at LuaComponent_Awake_mC52D1EBEE85D3101FF0A144BB470639E1378FC47 (:wasm-function[118913]:0x2977dc4) at RuntimeInvoker_TrueVoid_t4861ACF8F4594C3437BB48B6E56783494B843915(void (*)(), MethodInfo const*, void*, void**, void*) (:wasm-function[90317]:0x258a025) at il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) (:wasm-function[12242]:0x3d2c8b) at...
Cmakelists.txt最后添加strip功能,编译出来的安卓文件,非常小。但是不知道性能如何。麻烦各位大佬测试一下。 # strip message("CMAKE_STRIP=${CMAKE_STRIP}") if (LINUX OR ANDROID) add_custom_command(TARGET xlua POST_BUILD COMMAND ${CMAKE_STRIP} ${PROJECT_BINARY_DIR}/libxlua.so -o ${PROJECT_BINARY_DIR}/libxlua.so ) endif()

出现错误信息: 【System.Collections.Generic.List`1[T] 类型没生成, 使用反射替代.如果确定使用反射,将此类型添加到XLuaTools.cs配置中】 配置的导出 > typeof(IEnumerator), > typeof(List), > typeof(List.Enumerator), 调试信息: > SetCSTable -> type = System.Collections.Generic.List`1+Enumerator[UnityEngine.EventSystems.EventTrigger+Entry] xlua版本 > 2.1.15   
`LuaException: xlua.access, no field __Hotfix0_Update stack traceback: [C]: in field 'access' [string "Init"]:101: in field 'hotfix' [string "chunk"]:2: in main chunk` 已执行以下步骤: 1.宏定义:添加 HOTFIX_ENABLE 到 'Edit > Project Settings >...
1.Hotfix已经在静态类中配置,位置也放在了Editor文件夹。 2.打包完成后会打印已经注入成功。 3.运行打包后的程序还是报错为注入。