因自己的一个软件内嵌了lua并且要用到json,最近几天就查找了几个lua下能用的json,cjson用c写的,速度很快,于是就想把cjson作为静态库的方式添加到工程。网上没有找到教程只好自己来
1、下载lua5.2源码和cjson的源码
2、lua5.2直接作为vs2010的一个静态库工程编译即可,无需任何改动
3、cjson放到lua目录下并且在lua工程里添加”筛选器“cjson,在csjon筛选器里把cjson目录下的所有文件全部添加进去
4、lua和cjson都需要做一些修改,修改lua是为了把cjson作为静态库添加进去;修改cjson是因为这个是用c写的对vs2010支持的不是很好,具体修改如下
修改的地方:
lua5.2的源码改动:
1、lualib.h里面添加:
#define LUA_CJSONLIBNAME "cjson" LUAMOD_API int (luaopen_cjson) (lua_State *L);
static const luaL_Reg loadedlibs[] = { {"_G", luaopen_base}, {LUA_LOADLIBNAME, luaopen_package}, {LUA_COLIBNAME, luaopen_coroutine}, {LUA_TABLIBNAME, luaopen_table}, {LUA_IOLIBNAME, luaopen_io}, {LUA_OSLIBNAME, luaopen_os}, {LUA_STRLIBNAME, luaopen_string}, {LUA_BITLIBNAME, luaopen_bit32}, {LUA_MATHLIBNAME, luaopen_math}, //1234 {LUA_CJSONLIBNAME, luaopen_cjson}, {LUA_DBLIBNAME, luaopen_debug}, {NULL, NULL} };
如果上面的修改还是不懂怎么弄就仿照luaopen_math的添加方式,看看就明白了,很容易
CJson的改动
相对来说这个改动多一点,不过只要仔细的分析下还是很容易的
1、删除fpconv.c
2、fpconv.h修改成下面的样子,其中//1234后面的是我添加的
#define FPCONV_G_FMT_BUFSIZE 32 //1234 #define USE_INTERNAL_FPCONV //1234 #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**);
3、lua_cjson.c的前面添加如下代码:(lua.h和lauxlib.h的位置自己修改)
#include "..\\lua.h" #include "..\\lauxlib.h" #include <float.h> #define isnan(x) ((x) != (x)) #define isinf(x) (!_finite(x) && !_isnan(x)) #define strncasecmp _strnicmp
编译lua工程,没有错误就ok了。使用方法:在自己的脚本里添加:
local json = require("cjson")