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