而luac命令,作为Lua语言的编译器,更是Lua生态系统中不可或缺的一部分。本文将带您深入了解luac命令,包括它的定义、工作原理、主要特点、使用示例以及最佳实践。 一、luac命令简介与用途luac是Lua语言的编译器,它可以将Lua源代码(.lua文件)编译成Lua字节码(.luac文件)。 二、luac命令的工作原理与主要特点luac命令的工作原理相对简单:它读取Lua源代码文件,将其编译成Lua字节码,并将字节码保存到一个新的文件中。 luac命令的主要特点包括:高效性:通过预编译Lua源代码,luac可以减少运行时解析源代码的开销,从而提高代码的执行效率。可移植性:Lua字节码文件是跨平台的,可以在任何支持Lua的平台上运行。 三、luac命令在实际应用中的示例假设我们有一个名为script.lua的Lua脚本文件,我们可以使用luac命令将其编译成Lua字节码文件:luac -o script.luac script.lua
展开 src 文件夹,选中文件 luac.c ,通过右键菜单的 从项目中排除 选项将文件 luac.c 从项目中移除。 Visual C++空项目 ,项目名称为Luac。 在Visual Studio菜单栏中选择 生成-生成 Luac 来生成可执行程序。 可执行文件的生成位置: 32位:Luac/Release/ 64位:Luac/x64/Release/ 编译Lua链接库(lua.dll或lua.lib) 打开Visual Studio 展开 src 文件夹,选中文件 lua.c 、 luac.c 、 lua.hpp ,通过右键菜单的 从项目中排除 选项将文件 lua.c 、 luac.c 、 lua.hpp 从项目中移除。
于是就想使用5.2以上的版本试试;windows下没有5.2以上的版本,又不愿意使用VS编译出lua.exe;就在网上搜索下了关于使用命令行生成lua的静态库.动态库.lua.exe和luac.exe资料 loslib.c ltablib.c lstrlib.c loadlib.c linit.c lua.c link -link -out:lua.exe -verbose:lib *.obj 生成~~~ luac.exe : del *.obj luac.exe cl -c -nologo -O2 -Ob1 -Oi -Gs -MT lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c ltablib.c lstrlib.c loadlib.c linit.c print.c luac.c link -link -out:luac.exe -verbose:lib *.obj ---- 以上是针对5.1.4的;想比较于5.2而言,变动还是蛮大的,就需要根据源码中Doc目录下readme.html
download.html ),解压得到src文件夹 注意: 一定要用Lua官方的release版本,不要用官方的work版本,不然可能生成失败 在桌面上新建4个空文件夹lua、 luac , 在菜单中点击 从项目中排除,将文件 luac.c 从项目中排除,效果如下:修改 调试、团队 菜单 下面的两个选项, 分别设置为Release 、 x64(根据windows系统32位还是64位)点击菜单 生成Lua编译器(luac.exe)步骤与1相同, 但同样需要新建项目,命名为luac, 选中桌面上的luac文件夹作项目文件夹,需要在src文件夹中排除的文件是lua.c, 在项目属性中设置 配置类型 生成lua动态链接库(dll)步骤与1相同,需要新建项目,命名为luadll, 选中桌面上的luadll文件夹作项目文件夹,需要在src文件夹中排除的文件是 lua.c 、 luac.c 、 lua.hpp 生成lua静态链接库(lib)步骤与1相同,需要新建项目,命名为lualib, 选中桌面上的lualib文件夹作项目文件夹,需要在src文件夹中排除的文件是 lua.c 、 luac.c 、 lua.hpp
/O2 /c /DLUA_BUILD_AS_DLL *.c (备注:如果找不到cl.exe,则安装VS2017的时候需要勾选 C++/C 桌面开发) ren lua.obj lua.o ren luac.obj luac.o link /DLL /IMPLIB:lua5.3.4.lib /OUT:lua5.3.4.dll *.obj link /OUT:lua.exe lua.o lua5.3.4.lib lib /OUT:lua5.3.4-static.lib *.obj link /OUT:luac.exe luac.o lua5.3.4-static.lib ----------------
lua53 -> /usr/local/lua-5.3.1/bin/lua lrwxr-xr-x 1 root admin 29B 10 20 10:12 /usr/local/bin/luac -> /usr/local/lua-5.1.5/bin/luac lrwxr-xr-x 1 root admin 29B 10 20 10:08 /usr/local/bin/luac52 -> /usr/local/lua-5.2.3/bin/luac lrwxr-xr-x 1 root admin 29B 10 20 10:11 /usr/local/bin/luac53 -> /usr/local/lua-5.3.1/bin/luac Lua 语言 15 分钟快速入门 http://www.linuxidc.com/Linux/2013-06/86582.
luac.exe 可作为编译器,把 lua 代码编译成字节码,同时可作为反编译器,分析字节码的内容。 luac.exe -v // 显示luac的版本号 luac.exe Hello.lua // 在当前目录下,编译得到Hello.lua的二进制chunk文件luac.out(默认含调试符号) luac.exe 注 2:常量 tag 对应表 查看二进制 chunk 中的所有函数(精简模式): luac.exe -l Hello.lua luac.exe -l Hello.out 注 1:每个函数信息包括两个部分 分号后为 luac 生成的注释,以便于我们理解指令。 注 4:整个文件内容被放置到了 main 函数中,并以它作为嵌套起点。 查看二进制 chunk 中的所有函数(详细模式): luac.exe -l -l Hello.lua 注:参数为 2 个-l luac.exe -l -l Hello.out 注:详细模式下,luac
luac.c gcc -std=gnu99 -o luac luac.o liblua.a -lm -lreadline . usr/local/man/man1 /usr/local/share/lua/5.4 /usr/local/lib/lua/5.4 cd src && install -p -m 0755 lua luac local/include cd src && install -p -m 0644 liblua.a /usr/local/lib cd doc && install -p -m 0644 lua.1 luac luac.c gcc -std=gnu99 -o luac luac.o liblua.a -lm -Wl,-E -ldl make[2]: Leaving directory `/root/lua usr/local/man/man1 /usr/local/share/lua/5.4 /usr/local/lib/lua/5.4 cd src && install -p -m 0755 lua luac
download.html 下载lua-5.4.7.tar.gz 解压缩到所需项目中 .c文件放到scr文件夹 .h.hpp文件放到include文件夹 并将其全部包含到项目中 如图所示 找到.c文件里的 lua.c 和luac.c 将他们的 main函数注释 lua.c第670行起: luac.c 第196行起: 项目属性设置: 右键项目属性->C/C++->附加包含目录 填入$(SolutionDir)include; 测试代码 创造项目引入文件 VS新建项目,搜索 Windows ,选择 “ Windows 桌面向导 ”, 创造项目时选择动态链接库-空项目 将下载的lua5.4.7源代码的.c和.h文件全部引入(除lua.c和luac.c
use of tmpnam' is dangerous, better usemkstemp'cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -c -o luac.o luac.ccc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -c -o print.o print.ccc -o luac luac.o print.o
第一种:进入cmd命令行,然后进入源文件的目录下 执行命令luac hello.lua(后面的是文件名),可以看到当前目录下生成了一个文件hello.out,这是源文件编译好了,然后执行命令lua hello.out
luac 将上面的?替换为文件名,就是尝试加载的文件地址,多个分号分隔代表会从多个路径进行优先级查找。 require的模块存在哪儿? require的模块都存储在package.loaded。
同时,为了证明luac 与 luajit 表现一致,我同时也使用了 luajit 进行了测试。
之前使得bat调用luac进行编译时,会弹出一个“黑色的界面”,闪烁一下,感觉不太好。而脚本vbs或者jscript调用bat是可以利用Run方法,将其第二个参数设置为0便可以隐藏。
$money){ $params['touser'] = $openId; $params['template_id'] = 'muR0TMElyOHUy9Gy2M7lUAc3LpF1yd-d1JU21PQrz
DENABLE_CJSON_GLOBAL -DREDIS_STATIC='' -DLUA_USE_MKSTEMP -I/usr/local/opt/thrift@0.9/include -c -o luac.o luac.c cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -DREDIS_STATIC='' -DLUA_USE_MKSTEMP -I/usr/local /opt/thrift@0.9/include -c -o print.o print.c cc -o luac -L/usr/local/opt/thrift@0.9/lib luac.o print.o
当我使用 LuaStudio 运行时,发现结果反而与提示相反,甚是奇怪,而使用luac进行运行,与作者给予的提示相符,在某些地方性能可能有优化,比如读取35kb的文件时,时间还是比较快的(可能5.1版本做过优化了
DLUA_ANSI -DENABLE_CJSON_GLOBAL -c -o lua.o lua.c cc -O2 -Wall -DLUA_ANSI -DENABLE_CJSON_GLOBAL -c -o luac.o luac.c yes checking whether tls_model attribute is compilable... yes checking for a BSD-compatible install ): warning: the use of `tmpnam' is dangerous, better use `mkstemp' yes checking for valloc... cc -o luac luac.o print.o liblua.a -lm make[4]: Leaving directory `/root/go_home/src/github.com/wandoulabs/codis
和其他很多编程语言一样,比如lua,它也有lua & luac,其中lua负责运行虚拟机、垃圾回收等动作,而luac负责整个编程语言的编译。
sds.c) list(REMOVE_ITEM SRC_FILES ${LUA_FILE_PATH}/lua.c) list(REMOVE_ITEM SRC_FILES ${LUA_FILE_PATH}/luac.c sds.c) list(REMOVE_ITEM SRC_FILES ${LUA_FILE_PATH}/lua.c) list(REMOVE_ITEM SRC_FILES ${LUA_FILE_PATH}/luac.c