设为首页 收藏本站
查看: 661|回复: 0

[经验分享] windows下编译lua源码

[复制链接]

尚未签到

发表于 2018-6-10 11:44:48 | 显示全部楼层 |阅读模式
  因为之前一直使用 lua for windows 来搭建lua的使用环境,但是最新的 lua for windows 还没有lua5.2,我又想用这个版本的lua,所以被逼无奈只能自己编一下lua源码。
  首先从 lua的官网 下载你想要使用的lua源码,比如我下载的就是lua5.2。解压后内容如下:

  所有的lua源码都放在了 src 文件夹下,当然,不同的lua版本目录结构有可能不一样,但是都会有 src 这个文件夹,只有这个才是我们编译必须的。而且lua越做越精简了,5.1的版本里面还有一些test的例子之类的,5.2就只剩下必须的内容了。
  然后,如果是第一次编译lua,还是建议看一下doc文件夹下面的 readme.html。我就是通过那个才知道编译lua必备的文件的。
  通过readme,我们知道了编译lua其实包含3部分内容:编译lua的库文件编译lua解释器编译lua编译器
  因为我的电脑上安了vc的编译器cl,所以这3个部分可以用一个批处理文件搞定,下面我们就来写这个批处理,说到底就是3条编译命令罢了。
  在readme里面已经提到了这3个部分需要的内容,如下图:

  在上面那个文件夹下建一个新的bat文件,如下:

  然后开始写这个bat,先来生成lua的库文件:


  • cd src
  • cl /O2 /W3 /c /DLUA_BUILD_AS_DLL l*.c
  • del lua.obj luac.obj
  • link /DLL /out:lua52.dll l*.obj
  • cd ..

  这样就可以在src目录下生成lua52.dll了。注意到我去掉了lua.obj和luac.obj,因为根据readme这两个文件不是必须的。
  然后再生成一个解释器,接着在上面的代码里面加2行:


  • cd src
  • cl /O2 /W3 /c /DLUA_BUILD_AS_DLL l*.c
  • del lua.obj luac.obj
  • link /DLL /out:lua52.dll l*.obj
  • cl /O2 /W3 /c /DLUA_BUILD_AS_DLL lua.c
  • link /out:lua.exe lua.obj lua52.lib
  • cd ..

  其实就是重新编译lua.c,然后链接生成的lua52.lib就OK了。
  最后生成编译器,继续加2行,并添加编译luac.c:


  • cd src
  • cl /O2 /W3 /c /DLUA_BUILD_AS_DLL l*.c
  • del lua.obj luac.obj
  • link /DLL /out:lua52.dll l*.obj
  • cl /O2 /W3 /c /DLUA_BUILD_AS_DLL lua.c luac.c
  • link /out:lua.exe lua.obj lua52.lib
  • del lua.obj
  • link /out:luac.exe l*.obj
  • cd ..

  这样,运行这个批处理就可以在src目录下生成所需的lua库lua52.dll以及解释器lua.exe和编译器luac.exe了。
  当然,如果你双击这个批处理,黑框一闪而过,然后发现src下什么都没有生成,那是因为你的vc编译器cl没有被你放入windows系统环境中,这样的话你就只能通过vs或者是vc的命令处理器来运行这个批处理了或者把你的vs安装目录放到系统环境中去,比如在我的电脑上是这个路径:D:\Program Files\Visual Studio 2005\VC\bin。别问我怎么放到系统环境中去,百度吧少年。
  好人做到底,贴出用vs命令处理器编译需要干的事情:

  然后进入到mylua.bat的目录,接着直接运行这个批处理就OK了。简单吧。

  因为打开了3级警告开关,所以有很多警告,可以去不理睬。结果如下:

  最后上传这个bat文件。
  整个编译过程都OK,提两点:
  一个是在cl编译的时候加入了一个自定义的宏 /DLUA_BUILD_AS_DLL 这是因为在luaconf.h文件中定义了LUA_BUILD_AS_DLL宏,它控制了__declspec(dllexport)和__declspec(dllimport)的定义,必须加上这个开关才有这两个定义,否则编译出来的DLL没有任何导出函数。
  另一个是在最后生成编译器的时候,会发现我重新链接了所有的obj,而不是像生成解释器的时候一样,直接链接Lua52.lib。这是因为我这么做的时候发生了报错,提示有部分函数找不到。暂时没有明白是什么原因,有人说是bug,暂且不去管他。


附件:http://down.51cto.com/data/2362093

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-521712-1-1.html 上篇帖子: Smokeping 2.6.8 For Windows with IIS FCGI安装教程 下篇帖子: windows下实现wamp与tomcat环境整合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表