找回密码
 立即注册
查看: 427|回复: 0

XLua集成rapidjson与protobuf

[复制链接]
发表于 2021-8-10 17:13 | 显示全部楼层 |阅读模式
win32/64的编译

    先下载cmake并安装:
2. 解决编译报错的问题,安装VS2017同时勾选“使用C++的桌面开发”(勾选CMake相关选项)、“使用windows平台开发”(勾选C++相关选项)、“Visual Studio扩展开发”(注意只能是版本2017,我这里尝试2019的版本发现无法解决编译报错的问题),详情请看:
CMake Error at CMakeLists.txt:3 (project):
  Generator
    Visual Studio 15 2017
  could not find any instance of Visual Studio.
Configuring incomplete, errors occurred!3. 执行build/make_win64_lua53.bat,如果成功生成build\plugin_lua53\Plugins\x86_64\xlua.dll文件则说明编译正常;
Android的编译(Windows平台下)

    先下载Windows平台的Android Studio并安装,同时在后续安装步骤中安装好Android SDK:
2. 打开Android SDK Manager,安装CMake 3.6 的版本:
3. 下载Android NDK,版本“修订版 10e(2015 年 5 月)”,并解压到任意位置:
4. 在环境变量中,新建“ANDROID_SDK”和“ANDROID_NDK”两个变量,并配置好路径:
5. 执行build/make_android_lua53.bat,如果成功生成build\plugin_lua53\Plugins\Android\Libs\相关文件则说明编译正常;
添加rapidjson扩展

    首先拉取lua-rapidjson的项目:
2. 在xlua下的build文件夹下新建名为“lua-rapidjson”文件夹;
3. 在“lua-rapidjson”下新建“include”和“source”文件夹;
4. 将lua-rapidjson项目的“rapidjson\include”文件夹下的所有文件拷贝到xlua项目的“build\lua-rapidjson\include”文件夹下;
5. 将lua-rapidjson项目的“src”文件夹下的所有文件拷贝到xlua项目的“build\lua-rapidjson\source”文件夹下;
xlua项目下build\lua-rapodjson结构
6. 打开“build\CMakeLists.txt”文件,加入下面的脚本:
#begin lua-rapidjson
set (RAPIDJSON_SRC
    lua-rapidjson/source/Document.cpp
        lua-rapidjson/source/rapidjson.cpp
        lua-rapidjson/source/Schema.cpp
    lua-rapidjson/source/values.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添加protobuf扩展

    先拉取lua-protobuf项目:
2. 在xlua下的build文件夹下新建名为“lua-protobuf”文件夹;
3. 将lua-protobuf项目下的所有文件拷贝到xlua项目下的“build\lua-protobuf”文件夹下;
xlua项目下build\lua-protobuf结构
4. 打开“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编译链接库

执行xlua项目build目录下的对应的库文件生成脚本即可生成对应的链接库;
所有编译脚本都是按这个方式命名:make_平台_lua版本.后缀。
比如windows 64位lua53版本是make_win64_lua53.bat,android的luajit版本是make_android_luajit.sh,要编译哪个版本就执行相应的脚本即可。
执行完编译脚本会自动拷贝到plugin_lua53或者plugin_luajit目录,前者是lua53版本放置路径,后者是luajit。
配套的android脚本是在linux下使用的,脚本开头的NDK路径要根据实际情况修改。
项目中使用新增的库

    将编译好的链接库覆盖掉项目中对应的老链接库文件;
2. 打开项目中的LuaDLL.cs文件,加入下面的代码:
[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);
}

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

[MonoPInvokeCallback(typeof(LuaDLL.lua_CSFunction))]
public static int LoadPb(System.IntPtr L)
{
    return luaopen_pb(L);
}
3. 打开LuaEnv.cs文件,加入下面的代码:
AddBuildin("rapidjson", LuaDLL.Lua.LoadRapidJson);

AddBuildin("pb", LuaDLL.Lua.LoadPb);
4. 编写rapidjson测试代码:
local rapidjson = require('rapidjson')
local t = rapidjson.decode('{"a":123}')
print(t.a)
t.a = 456
local s = rapidjson.encode(t)
print('json', s)5. 编写protobuf测试代码:
local pb = require "pb"
assert(pb.loadfile "login.pb")
local loginCS = {
    username="jack",
    password="123456"
}
local bytes = assert(pb.encode("login.req_login", loginCS))
print(pb.tohex(bytes))
local recvData = assert(pb.decode("login.req_login", bytes))
print(recvData .username)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 04:37 , Processed in 0.088688 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表