将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}
};