• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua5.3.5源码编译

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

首先从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一下就把问题暴露了

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

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap