cjson 融合lua,暴露全局变量,vs编译

    xiaoxiao2025-05-27  14

    将lua5.1.4源码下来之后导入vs中,然后能够编译为静态库即可,然后下载cjson的源码库,将里面的源码全部导入

    1.lua-cjson-2.1.0\fpconv.h 文件修改

    /* Lua CJSON floating point conversion routines */ /* Buffer required to store the largest string representation of a double. * * Longest double printed with %.14g is 21 characters long: * -1.7976931348623e+308 */ #define FPCONV_G_FMT_BUFSIZE 32 //使用内部的转换机制 #define USE_INTERNAL_FPCONV //暴露cjson 为lua的全局对象使用就像使用os.clock()直接使用 #define ENABLE_CJSON_GLOBAL //将inline 冲定义为 __inline #define inline __inline #ifdef USE_INTERNAL_FPCONV static inline void fpconv_init() { /* Do nothing - not required */ } #else extern inline void fpconv_init(); #endif extern int fpconv_g_fmt(char*, double, int); extern double fpconv_strtod(const char*, char**); /* vi:ai et sw=4 ts=4: */

    2.lua-cjson-2.1.0\fpconv.c,在vs工程中remove掉这个文件

    3.lua-cjson-2.1.0\lua_cjson.c的前面添加如下代码:

    #include <assert.h> #include <string.h> #include <math.h> #include <limits.h> #include "..\lua-5.1.4\src\lua.h" //lua文件的位置需要修改你自己的 #include "..\lua-5.1.4\src\lauxlib.h" //lua文件的位置需要修改你自己的 #include "strbuf.h" #include "fpconv.h" #ifndef CJSON_MODNAME #define CJSON_MODNAME "cjson" #endif #ifndef CJSON_VERSION #define CJSON_VERSION "2.1.0" #endif /* Workaround for Solaris platforms missing isinf() 下面这里是修复*/ #include <float.h> #define isnan(x) ((x) != (x)) #define isinf(x) (!_finite(x) && !_isnan(x)) #define strncasecmp _strnicmp #define snprintf _snprintf 上面都是cjson库里面的文件修改,现在我们需要lua库与cjson库融合在一起就得转到lua库中添加cjson的调用,主要修改如下:

    1、lualib.h里面添加:

    #define LUA_CJSONLIBNAME "cjson" LUALIB_API int (luaopen_cjson) (lua_State *L); 2、linit.c里修改

    static const luaL_Reg lualibs[] = { {"", luaopen_base}, {LUA_LOADLIBNAME, luaopen_package}, {LUA_TABLIBNAME, luaopen_table}, {LUA_IOLIBNAME, luaopen_io}, {LUA_OSLIBNAME, luaopen_os}, {LUA_STRLIBNAME, luaopen_string}, {LUA_MATHLIBNAME, luaopen_math}, {LUA_CJSONLIBNAME, luaopen_cjson}, {LUA_DBLIBNAME, luaopen_debug}, {NULL, NULL} };

    转载请注明原文地址: https://ju.6miu.com/read-1299321.html
    最新回复(0)