因自己的一個軟件內嵌了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裡面添加:
[cpp]
#define LUA_CJSONLIBNAME "cjson"
LUAMOD_API int (luaopen_cjson) (lua_State *L);
2、linit.c裡修改loadedlibs數組,//1234注釋的地方是我添加的
[cpp]
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後面的是我添加的
[cpp]
#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的位置自己修改)
[cpp]
#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了。使用方法:在自己的腳本裡添加:
[cpp]
local json = require("cjson")
摘自 varding的專欄