首先从lua官网下载源码http://www.lua.org/download.html并解压:
VS2017 新建项目->控制台应用
将解压出来的src文件夹,拷贝到解决方案目录下
建好项目,添加lua源码:
Ctrl+A 选择src目录下所有文件,并添加至项目
至此准备工作完成,接下来分别编译Lua解释器Lua.exe,Lua编译器Luac.exe,Lua静态库(或者动态库)Lualib.lib。
编译Lua.exe:
从项目"源文件"筛选器中移除 luac.c。编译即可。
编译Luac.exe
建议在解决方案下新建个Luac的项目,依然将src下所有文件添加至项目,从项目"源文件"中移除 lua.c,编译即可。
编译Lualib.lib(或Luadll.dll)
在解决方案下新建项目Lualib 项目(根据需要,动态库或者静态库自行选择),同样将src下所有文件添加至项目,从项目"源文件"中 移除 lua.c和luac.c。
也可以先创建控制台应用,然后在项目属性里改:
编译好Lua.exe与Luac.exe后,记得把它们添加到环境变量,否则用起来很不方便。添加环境变量方法,网上资料很多,这里就不说了。
上面教程,在网上随便都可以搜到,我说说我遇到的坑...
我也按照上面教程编译出lua.exe luac.exe。写了一个测试程序,进行测试
可见lua.exe是没问题的。
测试luac:
正常输入luac a.lua,a.lua所在目录下应该会生一个.out文件,但我运行完并没有生成。
看了一下源码,发现问题所在。
我们为什么在前面要把lua.c或者luac.c只留一个,或者两个都删除(编译lib)? 因为lua.c里有一个main函数,即lua.exe的入口,而luac.c里也有main函数。但正常情况下,一个程序只能有一个main函数入口,所以我们要将另外一个删除,否则有多个main函数会冲突、报错或者出现一些奇怪的问题。
我的问题就找到了,因为在生成项目的时候,会自动生成一个项目名.cpp(Luac项目会生成luac.cpp),这个cpp文件中,就定义了一个main函数,编译的时候,把这个函数作为程序的入口函数,把luac.c中的main函数忽略了。所以luac就无法获取到传进来的参数,也就不会生成.out文件。
所以在编译的时候,还要记得把项目自动生成的 项目名.cpp文件移除(例如lua.cpp),因为这个文件中的main函数会影响 lua.c或者luac.c中main函数 获取参数,从而使程序无法正常工作。
想我编译lua.exe时,没有把lua.cpp移除,而且还能正常运行 a.lua文件,应该属于运气好。luac.exe一下就把问题暴露了
记下来这个小插曲,防止别人遇到和我同样的问题