lua-cmake编译cjson库
lua-cmake 编译 cjson 库, 这里在 windows 环境下, 使用 clion 工具编译 cjson.
已上传到 GitHub: https://github.com/yangxuan0261/lua-cjson-2.1.0
前篇
- 先参考 lua-cmake编译lua.md 编译出 lua 库 (liblua51.dll)
之前有写过用 vs 编译 cjson lua-vs编译lua-cjson的正确姿势.md, 必过 vs 太重了, 用 cmake 还可以跨平台.
流程
下载 lua-cjson-2.1.0.tar.gz , 地址: https://www.kyne.com.au/~mark/software/lua-cjson.php
使用 clion 打开工程, 修改 CMakeLists.txt, 增加一个环境变量
LUA_DIR
, 路径是 lua 源码路径同时把 lua 编译出来的动态库 liblua51.dll 丢带源码路径的上一级 (全路径是 D:/lua-5.1/liblua51.dll, 不太清楚为什么会去上一级找 liblua51.dll, 从 cmake 的日志可以看出来的)
cmake 刷新一下
构建, build -> build project, 目标文件 cjson.dll 在 cmake-build-debug 目录下
1
2
3
4
5
6
7
8
9====================[ Build | all | Debug ]=====================================
"D:\JetBrains\CLion 2019.3.3\bin\cmake\win\bin\cmake.exe" --build C:\Users\wolegequ\Desktop\lua-cjson-2.1.0\cmake-build-debug --target all -- -j 4
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/wolegequ/Desktop/lua-cjson-2.1.0/cmake-build-debug
[100%] Linking C shared module cjson.dll
[100%] Built target cjson
Build finished测试一下构建出的 cjson.dll, 需要用构建 liblua51.dll 库的工程构建出来的 lua.exe 去执行, 才不会报错:
error loading module 'cjson' from file 不是有效的 Win32 应用程序
测试代码, 先将 cjson.dll 丢到 测试脚本所在目录的 lib 目录下 (因为会去这里找 动态库)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19-- 添加搜索路径
local path = debug.getinfo(1, "S").source
path = string.sub(path, 2, -1) -- 去掉开头的"@"
path = string.gsub(path, '\\', '/')
path = string.match(path, "(.*)/") -- 当前脚本所在的路径
luapath = path .. "/?.lua"
cpath = path .. "/lib/?.dll"
package.path = package.path .. ";" .. luapath
package.cpath = package.cpath .. ";" .. cpath
local cjson = require "cjson"
local tbl = {
aaa = 123,
bbb = "world",
ccc = true,
}
print("--- lua version:", _VERSION)
print("--- json:", cjson.encode(tbl))结果