Lua5.3.5源码编译

首先从lua官网下载源码http://www.lua.org/download.html并解压:

Lua5.3.5源码编译_第1张图片

 

VS2017 新建项目->控制台应用

将解压出来的src文件夹,拷贝到解决方案目录下

Lua5.3.5源码编译_第2张图片

建好项目,添加lua源码:

Lua5.3.5源码编译_第3张图片Lua5.3.5源码编译_第4张图片

 

Ctrl+A 选择src目录下所有文件,并添加至项目

Lua5.3.5源码编译_第5张图片

至此准备工作完成,接下来分别编译Lua解释器Lua.exe,Lua编译器Luac.exe,Lua静态库(或者动态库)Lualib.lib

编译Lua.exe

    从项目"源文件"筛选器中移除 luac.c。编译即可。

编译Luac.exe

Lua5.3.5源码编译_第6张图片

   建议在解决方案下新建个Luac的项目,依然将src下所有文件添加至项目,从项目"源文件"中移除 lua.c,编译即可。

编译Lualib.lib(或Luadll.dll)

  在解决方案下新建项目Lualib 项目(根据需要,动态库或者静态库自行选择),同样将src下所有文件添加至项目,从项目"源文件"中 移除 lua.c和luac.c

Lua5.3.5源码编译_第7张图片

也可以先创建控制台应用,然后在项目属性里改:

Lua5.3.5源码编译_第8张图片

编译好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一下就把问题暴露了

 记下来这个小插曲,防止别人遇到和我同样的问题

 

 

你可能感兴趣的:(C/C++编程)