做网站拉客户有效吗,北京房产交易网官网,湖南智能网站建设公司,怎样做自适应网站简述 Lua与LuaJit的主要区别在于LuaJIT是基于JIT#xff08;Just-In-Time#xff09;技术开发的#xff0c;可以实现动态编译和执行代码#xff0c;从而提高了程序的运行效率。而Lua是基于解释器技术开发的#xff0c;不能像LuaJIT那样进行代码的即时编译和执行。因此Just-In-Time技术开发的可以实现动态编译和执行代码从而提高了程序的运行效率。而Lua是基于解释器技术开发的不能像LuaJIT那样进行代码的即时编译和执行。因此在运行速度方面LuaJIT要比Lua快得多。此外LuaJIT还支持更多的操作系统和处理器架构具有更广泛的适用性。但是由于它引入了JIT技术其实现复杂度更高而且在一些特殊情况下可能会存在性能问题。 这里选择LuaJit在嵌入式Linux系统使用LuaJit交叉编译也比较简单没有第三方库的依赖直接交叉编译源码即可。
LuaJit移植-交叉编译
源码下载
LuaJit的官网https://luajit.org/ 发现官网上的链接好像下载不下来了我把我这边用的源码上传到了码云可以从这里下载 https://gitee.com/fensnote/demo_code/blob/master/opensource/luajit/LuaJIT-2.0.5.tar.gz。
有个LuaJit开发文档博客做的不错可以参考下 luajit开发文档中文版二LuaJIT扩展 - zh7314 - 博客园
交叉编译
源码下载后解压
tar xvzf LuaJit-2.0.5.tar.gz上面那个博客中有详细的安装编译说明这里主要引用了其ARM交叉编译的部分 基于 GNU Makefile 的构建系统允许在任何主机上为任何受支持的目标进行交叉编译只要两种架构具有相同的指针大小。如果您想在 x64 操作系统上交叉编译到任何 32 位目标您需要安装 multilib 开发包例如 Debian/Ubuntu 上的 libc6-dev-i386并构建 32 位主机部分HOST_CC“gcc - m32” )。 每当主机操作系统和目标操作系统不同时您都需要指定TARGET_SYS否则会出现汇编程序或链接器错误。例如如果您在 Windows 或 macOS 主机上为嵌入式 Linux 或 Android 进行编译则需要将TARGET_SYSLinux添加到下面的示例中。对于最小的目标操作系统您可能需要禁用src/Makefile中的内置分配器 并使用TARGET_SYSOther。不要忘记为安装步骤指定相同的TARGET_SYS。 # Cross-compile to a 32 bit binary on a multilib x64 OS
make CCgcc -m32# Cross-compile on Debian/Ubuntu for Windows (mingw32 package)
make HOST_CCgcc -m32 CROSSi586-mingw32msvc- TARGET_SYSWindows
CROSS前缀允许指定标准 的GNU 交叉编译工具链Binutils、GCC 和匹配的 libc。前缀可能会因构建工具链 的--target不同而有所不同注意CROSS前缀后面有一个-。下面的示例使用适用于 Linux 的规范工具链三元组。由于在运行时通常没有简单的方法来检测 CPU 功能因此使用正确的 CPU 或架构设置进行编译非常重要。您可以在自己构建工具链时指定这些。或将 -mcpu...或-march...添加到TARGET_CFLAGS。对于 ARM拥有正确的-mfloat-abi...设置也很重要。否则 LuaJIT 可能无法以目标 CPU 的全部性能运行。# ARM soft-float
make HOST_CCgcc -m32 CROSSarm-linux-gnueabi- \TARGET_CFLAGS-mfloat-abisoft# ARM soft-float ABI with VFP (example for Cortex-A8)
make HOST_CCgcc -m32 CROSSarm-linux-gnueabi- \TARGET_CFLAGS-mcpucortex-a8 -mfloat-abisoftfp# ARM hard-float ABI with VFP (armhf, requires recent toolchain)
make HOST_CCgcc -m32 CROSSarm-linux-gnueabihf-# PPC
make HOST_CCgcc -m32 CROSSpowerpc-linux-gnu-
# PPC/e500v2 (fast interpreter only)
make HOST_CCgcc -m32 CROSSpowerpc-e500v2-linux-gnuspe-# MIPS big-endian
make HOST_CCgcc -m32 CROSSmips-linux-
# MIPS little-endian
make HOST_CCgcc -m32 CROSSmipsel-linux-编译还是挺顺利的我这边编译了两种处理器的版本没有出现什么错误。 编译好之后可以修改Makefile里的安装目录 修改为指定的安装目录然后执行安装命令make install 安装目录下的文件结构 我们只需要把bin、lib下载到板子里我这边是放在了/usr/local/下面。 这时就以执行luajit命令来测试下
$luajit
LuaJIT 2.0.5 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
JIT: ON CMOV SSE2 SSE3 SSE4.1 fold cse dce fwd dse narrow loop abc sink fuseprint(hello luajit!)
hello luajit!然后我们在编译个json的扩展库json在实际开发中用的比较多这里可以下载一个lua-cjson库进行交叉编译一下源文件也在上面的码云链接里下载。
解压编译cjson编译也比较简单只需要改下编译器修改一下lua头文件的路径头文件路径即刚才安装LuaJit时的目录里的include。修改如下 然后编译即可
make CCarm-none-linux-gcc
arm-none-linux-gcc -c -O3 -Wall -pedantic -DNDEBUG -I../install/include/luajit-2.0/ -fpic -o lua_cjson.o lua_cjson.c
arm-none-linux-gcc -c -O3 -Wall -pedantic -DNDEBUG -I../install/include/luajit-2.0/ -fpic -o strbuf.o strbuf.c
arm-none-linux-gcc -c -O3 -Wall -pedantic -DNDEBUG -I../install/include/luajit-2.0/ -fpic -o fpconv.o fpconv.c
arm-none-linux-gcc -shared -o cjson.so lua_cjson.o strbuf.o fpconv.o
文件比较少编译完成后生成cjson.so这个和平时Linux的动态库名字规则不太一样前面不用“lib”开头。
然后这个cjson.so下载到: /usr/local/lib/lua/5.1 这样就完成了。
测试
测试下json的使用
local cjson require(cjson)local json_str {name:John, age:30, city:郑州}
local json_tab cjson.decode(json_str)print(json_tab.name) -- 输出 John
print(json_tab.age) -- 输出 30
print(json_tab.city) -- 输出 New York运行
luajit test_cjson.lua
输出
John
30
郑州另外使用lua的table可以很方便的与json互转。