tolua_runtime独立编译c++服务器

大纲

  • 背景交代
  • 编译独立的win库
  • 问题及修改

背景交代

项目想要前端和后端使用的相通的lua文件作为逻辑处理或者是验证!这样能避免不少重复的工作量; 而c++调用lua的效率是比较高的;但是项目使用的是tolua的,为了在目前不动(少改动)的前提下,最好是将tolua编译一份放置到后端!

这里不考虑lua 多线程的问题!

编译独立的win库

  • 下载tolua-runtime

    直接从githubtolua_runtime下载就可以了!

  • 配置生成tolua工程

    因为tolua_runtime使用的的是Cross-compiling,但是我需要的是vs2019编译,所以我直接使用了cmake来生成!

    这里就不重复说明cmake的作用了!

    cmake_minimum_required(VERSION 2.8)
      
    set(CMAKE_BUILD_TYPE Debug)
      
    set(CMAKE_CXX_STANDARD 99)
      
    project(tolua)
      
      
    set(LUA_INC_PATH ${EXT_SRC_ROOT}/lua)
    set(LUA_SRC_PATH ${EXT_SRC_ROOT}/lua)
      
    set(LUA_SRC_FILES 
    	tolua.c
    	int64.c
    	uint64.c
    	pb.c
    	lpeg.c
    	struct.c
    	cjson/strbuf.c
    	cjson/lua_cjson.c
    	cjson/fpconv.c
    	luasocket/auxiliar.c
    	luasocket/buffer.c
    	luasocket/except.c
    	luasocket/inet.c
    	luasocket/io.c
    	luasocket/luasocket.c
    	luasocket/mime.c
    	luasocket/options.c
    	luasocket/select.c
    	luasocket/tcp.c
    	luasocket/timeout.c
    	luasocket/udp.c
    	luasocket/wsocket.c
    )
      
    include_directories(
        luajit-2.1/src
    	luasocket
    )
      
    add_library(tolua SHARED
        ${LUA_SRC_FILES}
    )
      
    link_libraries(tolua ws2_32)
    

    然后通过

    mkdir build_win32 & pushd build_win32
      
    cmake -G "Visual Studio 16 2019" -A Win32 ..
    

    以上就能在build_win32中生成对应的vs工程了!

  • 生成luajit

    这里使用的是x86的,所以无需在进行其他参数控制;使用Visual Studio Command Prompt执行一下指令(先cd到luajit的目录下)

    cd src
    msvcbuild.bat
    

    一般都没有什么问题!如果需要添加参数,可以直接看msvcbuild.bat的代码!

问题及修改

因为前面写的cmakelist只是简简单单填写了一些,还需要打开工程修改一下配置!

  • 将工程从使用工具切换成为动态库
  • 添加_WIN32_WCE
  • 添加库路径 luajit-2.1\src
  • 添加依赖的lib luajit.lib lua51.lib ws2_32.lib

完成上述步骤后,编译还有一个strcasecmp找不到符号!这里需要在lua_cjson.c中添加

#ifdef _MSC_VER
#define strcasecmp stricmp
#define strncasecmp  strnicmp
#endif

到此tolua_runtime的库已经编译成功!