LUA编译
一.源码准备:
1) 请上lua的网站下载lua-5.1.4.tar.gz 网址http://www.lua.org/download.htmlg
2) 解压lua-5.1.4.tar到目录下有Src目录为代码目录.
二.目录说明:
解压后相关目录说明如下:
1) etc 编译时用的一些文件,以及一些头文件和说明 luavs.bat也放在这儿
2) Src LUA的代码所放置的位置
3) test 一些测试用的.lua文件
三. luavs.bat在VS2008上的使用
Luavs.bat的使用目的是不要让我们自己去建立工程就可以生成对应的lua51.dll与lua51.lib方便开发人员直接上使用lua库,而本文的目的是想重新编译一个自己的dll库但还是必须先介绍一下使用luavs.bat来生成LUA动态库的方法:
打开”程序”->MVS2008->VST->Visual Studio 2008命令提示
可以打开VS2008自带的cmd工具,在这里才能运行luavs.bat
Luavs.bat要拷贝到lua的主目录下(etc的上级)
不要放在etc中运行一会分析的时候知道
运行luavs.bat后在src中会生成lua51.dll lua51.lib lua.exe luac.exe四个文件
Lua51.dll lua的动态库
Lua51.lib 编译时使用
Lua.exe lua解释器
Luac.exe 天啦我也不太了解不明白
如果只想得到四个文件的编程人员看到这就可以啦~(如何使用库可以往下看)
四. luavs.bat的分析(目的是建立lua项目工程)
让我们分析一下luavs.bat的内容吧代码如下: “//”为我的注释不
@setlocal
@set MYCOMPILE=cl /nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE
@set MYLINK=link /nologo
@set MYMT=mt /nologo
///动态库的生成
cd src //进入SRC目录
%MYCOMPILE% /DLUA_BUILD_AS_DLL l*.c //编译啦定义了两个宏
del lua.obj luac.obj //删除lua.c 与 luac.c相关的obj
%MYLINK% /DLL /out:lua51.dll l*.obj //输出lua51.dll的动态库
if exist lua51.dll.manifest^
%MYMT% -manifest lua51.dll.manifest -outputresource:lua51.dll;2
/编译lua.exe
%MYCOMPILE% /DLUA_BUILD_AS_DLL lua.c
%MYLINK% /out:lua.exe lua.obj lua51.lib //编译lua.c通过状态连接生成lua.exe
if exist lua.exe.manifest^
%MYMT% -manifest lua.exe.manifest -outputresource:lua.exe
/编译luac.exe
%MYCOMPILE% l*.c print.c
del lua.obj linit.obj lbaselib.obj ldblib.obj liolib.obj lmathlib.obj^
loslib.obj ltablib.obj lstrlib.obj loadlib.obj
%MYLINK% /out:luac.exe *.obj
if exist luac.exe.manifest^
%MYMT% -manifest luac.exe.manifest -outputresource:luac.exe
del *.obj *.manifest //清空所有编译时的上间文件
cd ..
.bat的一些编译参数说明如下:
请参考这些内容分析以上要设置的宏以及VS2008中要能需要设置的参数
@set MYCOMPILE=cl /nologo /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE
/CL编译
/MD并不提示版本 选择多线程、DLL版本的C Run-Time库
//O2:优化使产生的可执行代码速度最快
/W:设置警告等级
/C:在预处理输出中保留注释语句
/D:定义常量和宏,与源程序里的#define 有相同效果
/_CRT_SECURE_NO_DEPRECATE 主要是不让fopen等函数不提示warning
@set MYLINK=link /nologo
/link:将指定的选项传给连接器
@set MYMT=mt /nologo
/MT:选择多线程版本的C Run-Time库
总结:由以上的.bat观察可以得出以下几个重要的线索
1. 在VS2008中要设置LUA_BUILD_AS_DLL和_CRT_SECURE_NO_DEPRECATE的宏通过luaconfig.h中可得知这是导出库时使用的
2. 动态库中不用包含lua.c 与luac.c两个文件
3. 是多线程C版本的动态库
4. 不使用预编译头文件
五.建立VS2008 LUA工程
1.建立工程在VS2008中”文件”->”新建”->项目…”名为LUADLL
2.选择win32中的win32工程
3.下一步后勾选DLL
5. 加入LUA_BUILD_AD_DLL和_CRT_SECURE_NO_DEPRECATE宏到工程
左击工程选择属性
在预处理器中加入LUA_BUILD_AS_DLL(从luavs.bat中分析得到的)
为什么加这个宏大家看看luaconfig.h文件就知道为什么~?
6. 使用C编译
在c/c++中的高级中选择编译为:编译为C代码(/TC)
7. 不使用编译头
8. 设置完了就把.c和.h文件加入工程中,不要把lua.c luac.c print.c放到目录中
9. 编译后会在Debug目录下生成dll和lib文件
六.编译lua.exe文件(Lua解析器)
从新建立一个win32控制台应用程序工程, 建立工程在VS2008中”文件”->”新建”->项目…”名为LUA
选择空工程后把lua.c加入到工程
在链接器”输入”中加入LUADLL.lib引用进行编译记得把原来工程中的LUADLL.dll和LUADLL.lib放到对应工程目录下
可以编译运行了
七.关于lua.exe的使用
在VS2008中”工具”中选择”外部工具”
在命令中输入:刚才生成的lua.exe文件的地址
参数就是lua.exe要解析的lua文件的位置
LUA文件名字为Print.lua内容如下
print("Hello world");
运行时选择工具中多增加的LUA(&L)解析器.在输出框中可以得到hello world
运行的时候
希望这篇文章可以帮你完成进入lua的天地,相关笔记下载可以到资源中有图更给力