首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

VS2010 靜態編譯 cJSON 2.1 整合 Lua 5.2 完整指南

     編輯:關於C語言

項目需求

專案內嵌 Lua 5.2 且需 JSON 支援。經調研,cJSON 由 C 編寫、效能極佳,決定將其作為靜態庫整合進 Lua 工程,避免運行時依賴動態庫。

環境準備

  1. 下載 Lua 5.2 源碼 與 cJSON 源碼
  2. Lua 5.2 直接建立 VS2010 靜態庫專案編譯,無需修改
  3. 將 cJSON 整個目錄放入 Lua 目錄下,在 VS 中添加「篩選器」cJSON,將所有源文件納入

Lua 5.2 源碼修改(兩處)

1. lualib.h 添加聲明

#define LUA_CJSONLIBNAME  "cjson"
LUAMOD_API int (luaopen_cjson) (lua_State *L);

2. linit.c 註冊庫

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

cJSON 源碼修改(適配 VS2010)

1. 刪除 fpconv.c

2. 修改 fpconv.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**);

3. 修改 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 所有功能,無需額外動態庫部署。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved