因为之前一直使用 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的库文件:

  1. cd src
  2. cl /O2 /W3 /c /DLUA_BUILD_AS_DLL l*.c
  3. del lua.obj luac.obj
  4. link /DLL /out:lua52.dll l*.obj
  5. 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,暂且不去管他。

<转>windows下编译lua源码的更多相关文章

  1. windows下编译lua源码

    所有的lua源码都放在了 src 文件夹下,当然,不同的lua版本目录结构有可能不一样,但是都会有 src 这个文件夹,只有这个才是我们编译必须的.而且lua越做越精简了,5.1的版本里面还有一些te ...

  2. Windows下编译live555源码

    Windos下编译live555源码 环境 Win7 64位 + VS2012 步骤 1)源码下载并解压 在官网上下载最新live555源码,并对其进行解压. 2)VS下建立工程项目 新建Win32项 ...

  3. Nginx (一)Windows下编译Nginx源码以及安装 nginx for windows方法步骤

    转载自: http://apps.hi.baidu.com/share/detail/11192699#content Nginx介绍: Nginx ("engine x")是一个 ...

  4. 《Lucene in Action第二版》学习总结---如何在Windows下编译luceneinAction2Edition源码包

    1. 下载此源码包,位置是: www.manning.com/hatcher3,得到:lia2e.tar.gz,然后解压缩得到目录:lia2e,为了以后能辨识,我将此目录改名为:luceneinAct ...

  5. Windows,linux下编译qt源码(比较简单)

    一.linux下静态编译qt源码 1.取到qt源码并解压到文件夹 2.cd到qt目录下 3.使用configure生成makefile ./configure–prefix /opt/qtstatic ...

  6. Windows 10 x64 下编译 Hadoop 源码

    Windows 10 x64 下编译 Hadoop 源码 环境准备 Hadoop并没有提供官方的 Windows 10 下的安装包,所以需要自己手动来编译,官方文档中 BUILDING.txt 文件中 ...

  7. 用VC编译lua源码,生成lua语言的解释器和编译器

    用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...

  8. 用vs2013编译lua源码方法(一)

    用vs2013编译lua源码方法 来源:网络    编辑:admin 1.下载lua源码:lua-5.2.3.tar.gz,解压 2.用vs2013建立一个win32工程: 1)下载后解压到一个目录下 ...

  9. ubuntu下编译VLC源码

    http://blog.csdn.net/beitiandijun/article/details/9225591ubuntu下编译VLC源码 分类: 视频处理 2013-07-02 17:33 57 ...

随机推荐

  1. 【转载】Synflood code

    ''' Syn flood program in python by Tequila/e credits to Silver Moon for base's of syn packets. r s s ...

  2. 推荐下载CentOS下各种组件的网址

    http://vault.centos.org/ ftp://mirrors.sohu.com/ http://mirror.webtatic.com/

  3. 后门工具dbd

    后门工具dbd   dbd功能类似于Netcat,但提供强大的加密功能,支持AES-CBC-128和HMAC-SHA1加密.该工具可以运行在类Unix和Windows系统中.渗透测试人员首先使用该工具 ...

  4. [BZOJ 3157] 国王奇遇记

    Link: BZOJ 3157 传送门 Solution: 题意:求解$\sum_{i=1}^n m^i \cdot {i^m}$ $O(m^2)$做法: 定义一个函数$f[i]$,$f[i]=\su ...

  5. [Contest20180311]朋友

    是毒瘤的friends呢~ 注意到“产生感情”和后缀自动机的$Right$集合定义很像,所以先对所有串建广义sam,那么一个节点$s$里的所有串都互相产生感情,而从起点走到$s$走最长路所经过的节点里 ...

  6. 【博弈论】【SG函数】【找规律】Gym - 101147A - The game of Osho

    以后这种题还是不能空想,必须打个表看看,规律还是比较好找的……具体是啥看代码.用SG函数暴力的部分就不放了. #include<cstdio> using namespace std; i ...

  7. 【贪心】【二维偏序】【权值分块】bzoj1691 [Usaco2007 Dec]挑剔的美食家

    既然题目中的要求满足二维偏序,那么我们很自然地想到将所有东西(草和牛)都读进来之后,对一维(美味度)排序,然后在另一维(价值)中取当前最小的. 于是,Splay.mutiset.权值分块什么的都支持查 ...

  8. [CF842E]Nikita and game

    [CF842E]Nikita and game 题目链接: CF842E 博客地址: [CF842E]Nikita and game - skylee 题目大意: 一棵树初始只有一个编号为\(1\)的 ...

  9. 求满足n^2>12000的n的最大值 Exercise05_13

    /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:求满足n^2>12000的n的最大值 * */ public class Exercise05_13 { public ...

  10. Radius报文解析(转)

    RADIUS ,是远程认证拨号用户服务的简称.RADIUS原先设计的目的是为拨号用户进行认证和计费.后来经过多次改进,形成了一项通用的认证计费协议,主要完成在网络接入设备和认证服务器之间承载认证.授权 ...