xlua使用VS2019编译第三方库lua-protobuf

xlua github地址

lua-protobuf github地址

xlua官网编译第三方库教程

xlua作者编译好第三方库的项目示例

xlua官网编译第三方库教程是讲了主要部分,没有环境搭建等具体步骤。
之前用VS2017编译过xlua第三方库lua-protobuf,之后再编译一次,步骤有些忘了还是做个笔记。

步骤一:

1、下载xlua项目和lua-protobuf项目,
将lua-protobuf放到xlua项目的xlua/build文件夹下:
在这里插入图片描述
2、打开xlua/build/CMakeLists.txt,如图加入

#begin lua-profobuf
set (LPB_SRC 
    lua-protobuf/pb.c
)
set_property(
    SOURCE ${LPB_SRC}
    APPEND
    PROPERTY COMPILE_DEFINITIONS
    LUA_LIB
)
list(APPEND THIRDPART_INC lua-protobuf)
set (THIRDPART_SRC ${THIRDPART_SRC} ${LPB_SRC})
#end lua-protobuf

在这里插入图片描述
举例编译win64_luajit
打开xlua/build/make_win64_luajit.bat,修改为:

@echo off

call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"

echo Swtich to x64 build env
cd %~dp0\luajit-2.1.0b3\src
call msvcbuild_mt.bat static
cd ..\..

mkdir build_lj64 & pushd build_lj64
cmake -DUSING_LUAJIT=ON -G "Visual Studio 16 2019" -A x64 ..
IF %ERRORLEVEL% NEQ 0 cmake -DUSING_LUAJIT=ON -G "Visual Studio 16 2019" -A x64 ..
popd
cmake --build build_lj64 --config Release
md plugin_luajit\Plugins\x86_64
copy /Y build_lj64\Release\xlua.dll plugin_luajit\Plugins\x86_64\xlua.dll
pause

在这里插入图片描述

步骤二:

VS2019 环境搭建:
1、点击开始->Visual Studio Installer
2、选中 更多/修改/单个组件
3、搜索Cmake,选中2个共组件。
4、选中Windows 10 SDK,选中其中1个版本组件。
5、点击修改。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Cmake下载:
cmake下载地址
1、解压后打开cmake/bin/cmake-gui.exe
2、选中文件夹
在这里插入图片描述

在这里插入图片描述

步骤三:

配置和搭建完成!
双击xlua/build/make_win64_luajit.bat
之后看到生成文件:
xlua/build/plugin_luajit/Plugins/x86_64/xlua.dll
将此文件替换xlua/Assets/Plugins/x86_64/xlua.dll。
注意:不生效的话需要重启Unity!!
步骤四:
1、将lua-protobuf项目里的protoc.lua复制到unity项目Resources文件夹下,并改名为:protoc.lua.txt。
2、
xlua项目新建代码文件:
BuildInInit.cs

扫描二维码关注公众号,回复: 14673286 查看本文章
namespace XLua.LuaDLL
{
    
    
    using System.Runtime.InteropServices;

    public partial class Lua
    {
    
    

        [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
        public static extern int luaopen_pb(System.IntPtr L);

        [MonoPInvokeCallback(typeof(LuaDLL.lua_CSFunction))]
        public static int LoadLuaProfobuf(System.IntPtr L)
        {
    
    
            return luaopen_pb(L);
        }

    }
}

新建LuaProtobufTest.cs

using UnityEngine;
using XLua;

public class LuaProtobufTest : MonoBehaviour
{
    
    
    void Start()
    {
    
    
        LuaEnv luaenv = new LuaEnv();
        luaenv.AddBuildin("pb", XLua.LuaDLL.Lua.LoadLuaProfobuf);
        luaenv.DoString(@"
        ------------------------------------
        local pb = require 'pb'
        local protoc = require 'protoc'

        assert(protoc:load [[
        message Phone {
            optional string name        = 1;
            optional int64  phonenumber = 2;
        }
        message Person {
            optional string name     = 1;
            optional int32  age      = 2;
            optional string address  = 3;
            repeated Phone  contacts = 4;
        } ]])

        local data = {
        name = 'ilse',
        age  = 18,
            contacts = {
                { name = 'alice', phonenumber = 12312341234 },
                { name = 'bob',   phonenumber = 45645674567 }
            }
        }

        local bytes = assert(pb.encode('Person', data))
        print(pb.tohex(bytes))

        local data2 = assert(pb.decode('Person', bytes))
        print(data2.name)
        print(data2.age)
        print(data2.address)
        print(data2.contacts[1].name)
        print(data2.contacts[1].phonenumber)
        print(data2.contacts[2].name)
        print(data2.contacts[2].phonenumber)
        ---------------------------------
        "
);
        luaenv.Dispose();
    }
}

然后新建场景运行代码即可
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u012740992/article/details/114092246
今日推荐