在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
首先从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一下就把问题暴露了 记下来这个小插曲,防止别人遇到和我同样的问题
|
请发表评论