当前位置: 首页>移动开发>正文

lua的lfs库怎么下载 lua导入第三方库

关于腾讯为unity3d提供的lua方案xlua的功能和作用我就不再赘述,官方GitHub上有介绍。自己查看。

官方文档中也有关于xlua集成第三方lua库的流程介绍。不过是在Windows上的操作的。这里说一下在苹果mac上面的流程。

电脑系统和配置:macOS Ventura 13.1,Apple M1 Max芯片。

下面是操作流程:

开发前的准备工作

准备工作一

  • mac电脑安装对应最新版本的xcode,钩上命令行工具。cmake macso和ISO需要用到。
  • 安装unity2021,安装时需钩上macOS、iOS和Android的组件,也可后续在官网下载对应平台组件安装。新建测试工程。
  • 下载xlua https://github.com/Tencent/xLua
  • 下载xlua常用的第三方库(包含有常用的rapidjson,protobuf等)https://github.com/91Act/build_xlua_with_libs

准备工作二

  • 在mac上安装软件包管理器brew

        安装brew方法1:在termnial终端中输入以下命令(网络超时失败时可尝试开vpn)

  /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

        方法2:在termnial终端中输入以下命令,按回车后,根据提示操作:输入镜像序号 --> 输入Y,回车等待brew安装完成即可。如果出现网络下载错误,可以重新开始,切换其他镜像尝试。

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

lua的lfs库怎么下载 lua导入第三方库,lua的lfs库怎么下载 lua导入第三方库_macos,第1张

 

 

  • mac电脑配置cmake编译环境

使用 brew install cmake 安装 cmake,提示安装成功后,重启终端,输入 cmake --version命令查看是否安装成功。成功则会显示cmake当前版本号。

  • mac电脑配置android ndk 编译环境,cmake Android时需要用到。

在安装完unity后(需带上Android平台),新建工程,打开工程。在preferences窗口下external tools分页下可以看到unity已配置好的安卓sdk,ndk等路径,复用这个路径下的ndk即可。也可以自行下载ndk,使用对应路径。

lua的lfs库怎么下载 lua导入第三方库,lua的lfs库怎么下载 lua导入第三方库_macos_02,第2张

终端输入命令cd到系统ect目录下,输入命令open ~/.zshrc

打开zshrc文件编辑命令行环境变量。新版的命令行,macos已经转用zshrc,老的是在bash_profile添加。

添加export ANDROID_NDK=/Applications/Unity/Hub/Editor/2021.3.15f1c1/PlaybackEngines/AndroidPlayer/NDK

lua的lfs库怎么下载 lua导入第三方库,lua的lfs库怎么下载 lua导入第三方库_unity_03,第3张

 

  • mac电脑配置xcode命令行环境,cmake macos和iOS需要用到。

1、启动终端,输入命令:xcode-select --install,然后一路点击安装

2、安装成功后,输入命令:gcc -v 来查看是否成功

lua的lfs库怎么下载 lua导入第三方库,lua的lfs库怎么下载 lua导入第三方库_unity_04,第4张

 

 进入开发阶段

将下载的build_xlua_with_libs-master文件夹中build文件下的lua-rapidjson文件夹复制到下载的xLua-master文件夹中build文件夹中。

lua的lfs库怎么下载 lua导入第三方库,lua的lfs库怎么下载 lua导入第三方库_lua_05,第5张

 在CMakeLists.txt加入扩展

xLua的各平台Plugins编译使用cmake编译,好处是所有平台的编译都写在一个makefile,大部分编译处理逻辑是跨平台的。

xLua配套的CMakeLists.txt为第三方扩展提供了扩展点(都是list):

THIRDPART_INC:第三方扩展的头文件搜索路径。

THIRDPART_SRC:第三方扩展的源代码。

THIRDPART_LIB:第三方扩展依赖的库。

用文本编辑器打开cmakelists.txt文件,加入以下修改:

#begin lua-rapidjson
set (RAPIDJSON_SRC lua-rapidjson/source/rapidjson.cpp)
set_property(
        SOURCE ${RAPIDJSON_SRC}
        APPEND
        PROPERTY COMPILE_DEFINITIONS
        LUA_LIB
)
list(APPEND THIRDPART_INC  lua-rapidjson/include)
set (THIRDPART_SRC ${THIRDPART_SRC} ${RAPIDJSON_SRC})
#end lua-rapidjson

lua的lfs库怎么下载 lua导入第三方库,lua的lfs库怎么下载 lua导入第三方库_json_06,第6张

 

 各平台编译

所有编译脚本都是按这个方式命名:make_平台_lua版本.后缀。

将对应平台的编译脚本拉入终端执行,或者终端cd到对应目录执行。

lua的lfs库怎么下载 lua导入第三方库,lua的lfs库怎么下载 lua导入第三方库_lua_07,第7张

 执行完编译脚本会自动拷贝到plugin_lua53或者plugin_luajit目录,前者是lua53版本放置路径,后者是luajit。

lua的lfs库怎么下载 lua导入第三方库,lua的lfs库怎么下载 lua导入第三方库_lua_08,第8张

 根据xlua集成到unity中的流程,将新编译的平台文件复制到unity中。注意复制完成后,需要重启下unity工程。

C#侧集成

所有lua的C扩展库都会提供个luaopen_xxx的函数,xxx是动态库的名字,比如lua-rapidjson库该函数是luaopen_rapidjson,这类函数由lua虚拟机在加载动态库时自动调用,而在手机平台,由于ios的限制我们加载不了动态库,而是直接编译进进程里头。为此,XLua提供了一个API来替代这功能(LuaEnv的成员方法):

public void AddBuildin(string name, LuaCSFunction initer)

name:buildin模块的名字,require时输入的参数;

initer:初始化函数,原型是这样的public delegate int lua_CSFunction(IntPtr L),必须是静态函数,而且带MonoPInvokeCallbackAttribute属性修饰,这个api会检查这两个条件。

扩展LuaDLL.Lua类,用pinvoke把luaopen_rapidjson导出到C#,然后写一个符合lua_CSFunction定义的静态函数。

namespace LuaDLL
{ 
    public partial class Lua
    { 
            [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
            public static extern int luaopen_rapidjson(System.IntPtr L);
     
            [MonoPInvokeCallback(typeof(LuaDLL.lua_CSFunction))]
            public static int LoadRapidJson(System.IntPtr L)
            {
                return luaopen_rapidjson(L);
            }
    }
}

然后调用AddBuildin:完成注册

luaenv.AddBuildin("rapidjson", LuaDLL.Lua.LoadRapidJson);

测试

在lua脚本中调用一下测试代码

rapidjson = require "rapidjson"
local data = {name = "test json",age = 10,dd = 111111222222}
local jsonStr = rapidjson.encode(data)
print(jsonStr)
local temp_data = rapidjson.decode(jsonStr)
print(temp_data.name)

运行测试工程

 

lua的lfs库怎么下载 lua导入第三方库,lua的lfs库怎么下载 lua导入第三方库_unity_09,第9张

 总结

其他lua第三方库的添加也是安这个流程,删除则是反过来的流程。无论是第三方还是自己定义的c代码都能接入到xlua的库中,只要代码在各个平台兼容即可。

mac上可以编译mac os ,ios 和Android平台库。win上可以编译x86平台。


https://www.xamrdz.com/mobile/4ma1925764.html

相关文章: