專案內嵌 Lua 5.2 且需 JSON 支援。經調研,cJSON 由 C 編寫、效能極佳,決定將其作為靜態庫整合進 Lua 工程,避免運行時依賴動態庫。
#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},
// 新增 cjson
{LUA_CJSONLIBNAME, luaopen_cjson},
{LUA_DBLIBNAME, luaopen_debug},
{NULL, NULL}
};
fpconv.cfpconv.h#define FPCONV_G_FMT_BUFSIZE 32
#define USE_INTERNAL_FPCONV
#define inline __inline
#ifdef USE_INTERNAL_FPCONV
static inline void fpconv_init() { /* Do nothing */ }
#else
extern inline void fpconv_init();
#endif
extern int fpconv_g_fmt(char*, double, int);
extern double fpconv_strtod(const char*, char**);
lua_cjson.c 頭部#include "..\\lua.h"
#include "..\\lauxlib.h"
#include
#define isnan(x) ((x) != (x))
#define isinf(x) (!_finite(x) && !_isnan(x))
#define strncasecmp _strnicmp
編譯 Lua 專案,無錯誤即成功。Lua 腳本中使用:
local json = require("cjson")
即可直接調用 cJSON 所有功能,無需額外動態庫部署。