当前位置: 首页 > news >正文

Lua与LuaJIT的安装与使用

1.Lua的安装与使用
(1)在Lua主页https://www.lua.org/download.html 下载源代码 https://www.lua.org/ftp/lua-5.4.8.tar.gz
(2)按照上述页面描述的步骤安装

kylin@kylin-gtj:/shujv/par$ tar xf lua-5.4.8.tar.gz
kylin@kylin-gtj:/shujv/par$ cd lua-5.4.8
kylin@kylin-gtj:/shujv/par/lua-5.4.8$ make all test
make[1]: Entering directory '/shujv/par/lua-5.4.8/src'
Guessing Linux
make[2]: Entering directory '/shujv/par/lua-5.4.8/src'
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
make[3]: Entering directory '/shujv/par/lua-5.4.8/src'
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lapi.o lapi.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX   -c lcode.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lctype.o lctype.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o ldebug.o ldebug.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o ldo.o ldo.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o ldump.o ldump.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lfunc.o lfunc.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lgc.o lgc.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX   -c llex.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lmem.o lmem.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lobject.o lobject.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lopcodes.o lopcodes.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX   -c lparser.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lstate.o lstate.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lstring.o lstring.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o ltable.o ltable.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o ltm.o ltm.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lundump.o lundump.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lvm.o lvm.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lzio.o lzio.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lauxlib.o lauxlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lbaselib.o lbaselib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lcorolib.o lcorolib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o ldblib.o ldblib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o liolib.o liolib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lmathlib.o lmathlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o loadlib.o loadlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o loslib.o loslib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lstrlib.o lstrlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o ltablib.o ltablib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lutf8lib.o lutf8lib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o linit.o linit.c
ar rcu liblua.a lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lcorolib.o ldblib.o liolib.o lmathlib.o loadlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o linit.o 
ar: `u' 修饰符被忽略,因为 `D' 为默认(参见 `U')
ranlib liblua.a
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o lua.o lua.c
gcc -std=gnu99 -o lua   lua.o liblua.a -lm -Wl,-E -ldl 
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX    -c -o luac.o luac.c
gcc -std=gnu99 -o luac   luac.o liblua.a -lm -Wl,-E -ldl 
make[3]: Leaving directory '/shujv/par/lua-5.4.8/src'
make[2]: Leaving directory '/shujv/par/lua-5.4.8/src'
make[1]: Leaving directory '/shujv/par/lua-5.4.8/src'
make[1]: Entering directory '/shujv/par/lua-5.4.8/src'
./lua -v
Lua 5.4.8  Copyright (C) 1994-2025 Lua.org, PUC-Rio
make[1]: Leaving directory '/shujv/par/lua-5.4.8/src'

(3)运行
编辑脚本test.lua

--[[ 函数返回两个值的最大值 --]]
function max(num1, num2)if (num1 > num2) thenresult = num1;elseresult = num2;endreturn result;
end
-- 调用函数
print("两值比较最大值为 ",max(10,4))
print("两值比较最大值为 ",max(5,6))

使用编译的lua二进制文件执行lua脚本

kylin@kylin-gtj:/shujv/par/lua-5.4.8$ cd src
kylin@kylin-gtj:/shujv/par/lua-5.4.8/src$ ./lua ../../test.lua
两值比较最大值为 	10
两值比较最大值为 	6

2.LuaJIT的安装与使用
在 LuaJIT主页 http://luajit.org/luajit.html通过点击 browsable mirror,
再进入luajit-2.0.git downloadable bundles页面,按其中描述的步骤安装
(1)下载bundle文件。 https://repo.or.cz/luajit-2.0.git/luajit-2.0-44d77d5f.bundle
(2)建立git目录,并从bundle文件提取。

root@66d4e20ec1d7:/par# git init luajit-2.0
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>
Initialized empty Git repository in /par/luajit-2.0/.git/
root@66d4e20ec1d7:/par# cd luajit-2.0
root@66d4e20ec1d7:/par/luajit-2.0# git remote add origin ../luajit-2.0-44d77d5f.bundle
root@66d4e20ec1d7:/par/luajit-2.0# git fetc
git: 'fetc' is not a git command. See 'git --help'.The most similar commands arefetchbisect
root@66d4e20ec1d7:/par/luajit-2.0# git fetch
Receiving objects: 100% (20667/20667), 4.30 MiB | 33.36 MiB/s, done.
Resolving deltas: 100% (17175/17175), done.
From ../luajit-2.0-44d77d5f.bundle* [new branch]      v2.1       -> origin/v2.1* [new branch]      v2.0       -> origin/v2.0* [new branch]      master     -> origin/master* [new tag]           v2.0.0               -> v2.0.0* [new tag]           v2.0.0-beta1         -> v2.0.0-beta1* [new tag]           v2.0.0-beta10        -> v2.0.0-beta10* [new tag]           v2.0.0-beta11        -> v2.0.0-beta11* [new tag]           v2.0.0-beta2         -> v2.0.0-beta2* [new tag]           v2.0.0-beta2-hotfix2 -> v2.0.0-beta2-hotfix2* [new tag]           v2.0.0-beta3         -> v2.0.0-beta3* [new tag]           v2.0.0-beta4         -> v2.0.0-beta4* [new tag]           v2.0.0-beta5         -> v2.0.0-beta5* [new tag]           v2.0.0-beta6         -> v2.0.0-beta6* [new tag]           v2.0.0-beta7         -> v2.0.0-beta7* [new tag]           v2.0.0-beta8         -> v2.0.0-beta8* [new tag]           v2.0.0-beta8-fixed   -> v2.0.0-beta8-fixed* [new tag]           v2.0.0-beta9         -> v2.0.0-beta9* [new tag]           v2.0.0-rc1           -> v2.0.0-rc1* [new tag]           v2.0.0-rc2           -> v2.0.0-rc2* [new tag]           v2.0.0-rc3           -> v2.0.0-rc3* [new tag]           v2.0.1               -> v2.0.1* [new tag]           v2.0.1-fixed         -> v2.0.1-fixed* [new tag]           v2.0.2               -> v2.0.2* [new tag]           v2.0.3               -> v2.0.3* [new tag]           v2.0.4               -> v2.0.4* [new tag]           v2.0.5               -> v2.0.5* [new tag]           v2.0.ROLLING         -> v2.0.ROLLING* [new tag]           v2.1.0-beta1         -> v2.1.0-beta1* [new tag]           v2.1.0-beta2         -> v2.1.0-beta2* [new tag]           v2.1.0-beta3         -> v2.1.0-beta3* [new tag]           v2.1.ROLLING         -> v2.1.ROLLING
root@66d4e20ec1d7:/par/luajit-2.0# git remote set-url origin https://repo.or.cz/luajit-2.0.git
root@66d4e20ec1d7:/par/luajit-2.0# git fetch --prune origin
^C
root@66d4e20ec1d7:/par/luajit-2.0# git checkout v2.1
branch 'v2.1' set up to track 'origin/v2.1'.
Switched to a new branch 'v2.1'

(3)安装
按照http://luajit.org/install.html的步骤

root@66d4e20ec1d7:/par/luajit-2.0# make
==== Building LuaJIT 2.1 ====
make -C src
make[1]: Entering directory '/par/luajit-2.0/src'
HOSTCC    host/minilua.o
HOSTLINK  host/minilua
VERSION   luajit.h
DYNASM    host/buildvm_arch.h
HOSTCC    host/buildvm.o
HOSTCC    host/buildvm_asm.o
HOSTCC    host/buildvm_peobj.o
HOSTCC    host/buildvm_lib.o
HOSTCC    host/buildvm_fold.o
HOSTLINK  host/buildvm
BUILDVM   lj_vm.S
ASM       lj_vm.o
CC        lj_assert.o
CC        lj_gc.o
BUILDVM   lj_ffdef.h
CC        lj_err.o
CC        lj_char.o
BUILDVM   lj_bcdef.h
CC        lj_bc.o
CC        lj_obj.o
CC        lj_buf.o
CC        lj_str.o
CC        lj_tab.o
CC        lj_func.o
CC        lj_udata.o
CC        lj_meta.o
CC        lj_debug.o
CC        lj_prng.o
CC        lj_state.o
CC        lj_dispatch.o
CC        lj_vmevent.o
CC        lj_vmmath.o
CC        lj_strscan.o
CC        lj_strfmt.o
CC        lj_strfmt_num.o
CC        lj_serialize.o
CC        lj_api.o
CC        lj_profile.o
CC        lj_lex.o
CC        lj_parse.o
CC        lj_bcread.o
CC        lj_bcwrite.o
CC        lj_load.o
CC        lj_ir.o
CC        lj_opt_mem.o
BUILDVM   lj_folddef.h
CC        lj_opt_fold.o
CC        lj_opt_narrow.o
CC        lj_opt_dce.o
CC        lj_opt_loop.o
CC        lj_opt_split.o
CC        lj_opt_sink.o
CC        lj_mcode.o
CC        lj_snap.o
CC        lj_record.o
CC        lj_crecord.o
BUILDVM   lj_recdef.h
CC        lj_ffrecord.o
CC        lj_asm.o
CC        lj_trace.o
CC        lj_gdbjit.o
CC        lj_ctype.o
CC        lj_cdata.o
CC        lj_cconv.o
CC        lj_ccall.o
CC        lj_ccallback.o
CC        lj_carith.o
CC        lj_clib.o
CC        lj_cparse.o
CC        lj_lib.o
CC        lj_alloc.o
CC        lib_aux.o
BUILDVM   lj_libdef.h
CC        lib_base.o
CC        lib_math.o
CC        lib_bit.o
CC        lib_string.o
CC        lib_table.o
CC        lib_io.o
CC        lib_os.o
CC        lib_package.o
CC        lib_debug.o
CC        lib_jit.o
CC        lib_ffi.o
CC        lib_buffer.o
CC        lib_init.o
AR        libluajit.a
CC        luajit.o
BUILDVM   jit/vmdef.lua
DYNLINK   libluajit.so
LINK      luajit
OK        Successfully built LuaJIT
make[1]: Leaving directory '/par/luajit-2.0/src'
==== Successfully built LuaJIT 2.1 ====

(3)使用
按照http://luajit.org/running.html介绍的详细步骤,或者简单地测试

root@66d4e20ec1d7:/par/luajit-2.0# src/luajit ../test.lua
两值比较最大值为 	10
两值比较最大值为 	6

3.性能比较

用递归求斐波那契数列程序测试

function fibonacci(n)if n <= 1 thenreturn nelsereturn fibonacci(n - 1) + fibonacci(n - 2)end
endprint("fibonacci(40)",fibonacci(40))

测试结果

root@66d4e20ec1d7:/par/luajit-2.0# time src/luajit ../fib.lua
fibonacci(20)	6765real	0m0.030s
user	0m0.000s
sys	0m0.000s
root@66d4e20ec1d7:/par/luajit-2.0# time src/luajit ../fib.lua
fibonacci(40)	102334155real	0m2.170s
user	0m2.168s
sys	0m0.000s
root@66d4e20ec1d7:/par/luajit-2.0# time ../lua-5.4.8/src/lua  ../fib.lua
fibonacci(20)	6765real	0m0.031s
user	0m0.000s
sys	0m0.000s
root@66d4e20ec1d7:/par/luajit-2.0# time ../lua-5.4.8/src/lua  ../fib.lua
fibonacci(40)	102334155real	0m13.190s
user	0m13.184s
sys	0m0.000s

可见当n较大时,JIT的提升幅度很大。

http://www.dtcms.com/a/540342.html

相关文章:

  • 数独生成题目lua脚本
  • 影响网站加载速度wordpress获得当前文章的相关文章
  • Hive 技术深度解析与 P7 数据分析架构师多行业全场景实战课程合集(视频教程)
  • 嘉兴高端网站建设公司网络安全等级保护
  • HOW - localstorage 超时管理方案
  • java如何判断上传文件的类型,不要用后缀名判断
  • 【Linux】系统备份与恢复:rsync 与 tar 的完整使用教程
  • ROS2系列(3):第一个C++节点
  • zookeeper是什么
  • 构建“全链路解决方案”:解决集团化医院信创的三重难题
  • 网站建设区别广安市邻水建设局网站
  • 网站中的文字滑动怎么做化妆品网站建设策略
  • 【Netty4核心原理⑮】【Netty 编解码的艺术】
  • PHP-Casbin 在分布式服务中利用 Watcher 做策略同步
  • OCP考试必须培训吗?费用多少?
  • SpringBoot + 百度内容安全实战:自定义注解 + AOP 实现统一内容审核(支持文本 / 图片 / 视频 + 白名单 + 动态开关)
  • 心智结构与组织学习
  • NAS 私有云零信任部署:cpolar 加密访问 + 本地存储,破解安全与便捷难题
  • C++面向对象继承全面解析:不能被继承的类、多继承、菱形虚拟继承与设计模式实践
  • 只做财经的网站厦门高端网站建设公
  • 星宿网站建设系统开发过程中原型有哪些作用
  • Angular 入门项目
  • 架构解析:衡石科技如何基于AI+Data Agent重构智能数据分析平台
  • 云栖实录:重构可观测 - 打造大模型驱动的云监控 2.0 与 AIOps 新范式
  • AR技术如何确保数据准确无误?
  • Python-openai对话LLM
  • 智慧码垛系统介绍
  • Axure高保真View Design框架元件库
  • 网站 linux 服务器昆明企业网站开发公司
  • 网站介绍经过下拉怎么做wordpress统计访问ip