参考原文请看:

Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境(一)

Lua学习笔记2:Windows7下使用VS2015搭建Lua开发环境(二)

本篇主要分以下几个部分:

一、下载并利用vs2015编译lua源码

  编译lua主要编译三个部分,lua链接库,lua解释器,lua编译器

  lua链接库就是静态库和动态库,*.lib和*.dll。有了dll就可以直接在工程里开发了。就如示例二中,直接添加了链接,就可以调用lua函数,并正常运行了。

  lua.exe是lua的解释器,可以直接运行lua脚本;就是编写了lua文件,比如test.lua,就可以运行,或者在命令行直接输入lua,然后按照lua规则写脚本并直接运行了。

  luac.exe是lua的编译工具,生成lua字节码,以便lua代码的更快加载和保护lua代码,同时也能检查lua脚本的错误。

二、示例:使用vs2015创建c++,调用lua方法

一、下载并编译lua源码

 <1>、首先进入lua官网,下载最新版本的lua源码。

  这里我将文件解压放到D盘,D:\lua-5.3.1就是该目录。

<2>、启动VS2015创建新的项目

  1、选择【文件】—>【新建】—>【项目】,选择Win32里面的Win32控制台应用程序,这里我设置名称为Lua5.3,其他配置参数不变,点击【确定】按钮。

  2、在应用程序设置向导里面,选择类型为【静态库】,然后点击【完成】即可,如图所示。

  3、创建好项目后,在【头文件】选项上点击鼠标右键,以此选择【添加】—>【现有项】,然后找到我们的lua目录下的src文件夹,这里我的为D:\lua-5.3.1\src目录。然后我们把src下的所有.h文件添加到头文件。

  4、同上操作,我们把除去【lua.c】和【luac.c】以为的所有.c文件都添加到【源文件】。

  注意: 需要注意的是 lua.c  和luac.c 不能拷贝进去,这两个文件不能编译。如图所示:

  5、配置项目的属性,在项目的“配置属性” 界面中操作选择【C/C++】—> 【常规】—> 【附加包含目录】,然后输入我们的lua源码路径D:\lua-5.3.1\src。如图所示:

  然后在【C/C++】—> 【高级】—> 【编译为】选择【编译为C代码(/TC)】,最后确定。

  配置好上面这些后,然后我们就可以开始编译此项目来生成我们需要的.lib库文件,如图。

  这里生成成功了,如果Debug生成失败大家可以使用Release 来生成,生成后的.lib文件我们可以在我们的项目目录里查看,如图所示。

 <3>、生成了lib文件,可能已经满足需求了,但是如果需要dll的话,也要生成dll文件。

  利用上面已经建好的目录,右键项目->属性,打开属性界面,选择配置属性-》常规,将配置类型由lib,改成dll。如图所示:

  

  点击应用,确定。然后重新生成,就可以生成dll文件。

<4>、编译lua解释器lua.exe

  将lua.c和luac.c添加进项目的源文件。然后将luac.c的main函数注释掉。

  同样,将项目的配置类型改为exe,然后右键项目重新生成,不出问题会生成lua5.3.exe,但也可能出错。我遇到的错误是:

  MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 WinMain

  这个错误是入口函数不对导致的。

  ‘

  原因分析

产生这个问题的真正原因是c++语言运行时找不到适当的程序入口函数,一般情况下,如果是windows程序,那么WinMain是入口函数,在VS2010中新建项目为“win32项目”如果是dos控制台程序,那么main是入口函数,在VS2010中新建项目为“win32控制台应用程序”。而如果入口函数指定不当,很显然c++语言运行时找不到配合函数,它就会报告错误。

  解决办法

如果我们需要的是windows程序

Step1.菜单中选择 Project->Properties, 弹出Property Pages窗口
Step2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_CONSOLE, 添加_WINDOWS.

Step3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为Windows(/SUBSYSTEM:WINDOWS)

如果我们需要的是控制台程序

Step1.菜单中选择 Project->Properties, 弹出Property Pages窗口
Step2.在左边栏中依次选择:Configuration Properties->C/C++->Preprocessor,然后在右边栏的Preprocessor Definitions对应的项中删除_WINDOWS, 添加_CONSOLE.
Step3.在左边栏中依次选择:Configuration Properties->Linker->System,然后在右边栏的SubSystem对应的项改为CONSOLE(/SUBSYSTEM:CONSOLE)

  ’

  这里,我们需要的是console也就是控制台程序。因此添加_CONSOLE,并将系统改为CONSOLE之后,就可以生成lua.exe了。

<5>、生成编译器luac.exe

  将lua.c的main函数注释掉,解开luac.c的main函数,直接重新生成就是luac.exe了。

到此为止,我们的lua5.3就编译好了,为方便以后引用,这里我把他拷贝到lua\bin目录下,如图所示。

二、示例

(1)、链接库示例

  1、首先我们使用vs2015新建一个Win32控制台应用程序,命名为LuaTest。

  2、配置lua项目头文件默认路径

在项目的“配置属性” 界面中操作选择【C/C++】—> 【常规】—> 【附加包含目录】,然后输入我们的lua源码路径D:\lua-5.3.1\src。如图所示:

  3、为项目添加.lib库引用

配置项目的属性,在项目的“配置属性” 界面中操作选择【链接器】—> 【常规】—> 【附加库目录】,然后输入我们的lua库文件目录,这个目录为我们上篇结尾处放置的位置。也就是我们的lua5.3的源码目录,D:\lua-5.3.1\。如图所示:

配置项目的属性,在项目的“配置属性” 界面中操作选择【链接器】—> 【输入】—> 【附加依赖库】位置添加我们所编译的Lua5.3.lib库文件名称,然后确定即可。如图所示:

到此我们的lua开发环境算是配置好了,下面我们来测试我们自己搭建的lua环境。

我们在源代码里创建一个main.lua的文件,如图所示

创建好后,我们在里面输入打印文本。如图所示:

然后在LuaTest.cpp主函数里面,我们引用标准输入输出以及lua的头文件,然后编写测试代码,这里是打印main.lua文件里的内容。如图所示:

到此,我们完整的lua环境就算搭建好了啊。

<2>、命令行测试

  将刚才bin目录,配置到我的电脑环境变量path内。敲入cmd命令,将控制台打开,输入lua,将出现

  

  输入print("hello world!")

  控制台会输出hello world!。这标志这lua.exe编译正确。

<3>、luac.exe

  有的时候我们的lua程序不想被别人看到源码,我们就编译成一个.out中间文件,首先创建一个lua程序(新建记事本程序后改后缀名.lua)hello.lua,在里面写print("hello world")然后在控制台切换到luac.exe的目录下输入luac hello.lua,会得到一个luac.out文件,然后在控制台输入lua.exe luac.out就可以输出Hello World了。

总结工作终于大功告成啦~~~~~

[转载]使用VS2015搭建Lua开发环境的更多相关文章

  1. (转)Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境

    Lua学习笔记1:Windows7下使用VS2015搭建Lua开发环境(一)注意:工程必须添加两个宏:“配置属性”/“C或C++”/“预处理器”/“预处理器定义”,添加两个宏:_CRT_SECURE_ ...

  2. lua----------------使用VS2015搭建lua开发环境的一些侥幸成功经验,

    所以本篇博文介绍在Windows平台下,使用VS2015搭建lua开发环境的一些侥幸成功经验,安装过程参考网上教程,安装过程如下(参考http://www.byjth.com/lua/33.html) ...

  3. 第2课 - 搭建Lua开发环境

    第2课 - 搭建Lua开发环境 1. Lua 的优点 (1)Lua 使用标准的 ANSI C 进行开发,可以无缝集成到宿主程序,且几乎支持所有平台. (2)Lua 是开源且免费的软件,以源码的方式直接 ...

  4. Lua环境搭建之使用EditPlus搭建Lua开发环境

    luatools正则表达式extension工具encoding 一.语法高亮 打开 EditPlus,Tools 工具-->Preferences首选项==>setting & ...

  5. nginx 与 lua 开发环境搭建

    首先下载最新版的 相关软件 的安装文件. nginx: http://nginx.org/en/download.html LuaJIT: http://luajit.org/download.htm ...

  6. Nginx详解二十三:Nginx深度学习篇之Nginx+Lua开发环境搭建

    Nginx+Lua开发环境 1.下载LuaJIT解释器wget http://luajit.org/download/LuaJIT-2.0.2.tar.gztar -zxvf LuaJIT-2.0.2 ...

  7. [转载]在Windows下搭建Android开发环境

    http://jingyan.baidu.com/article/bea41d437a41b6b4c51be6c1.html 在Windows下搭建Android开发环境 | 浏览:30780 | 更 ...

  8. Sublime text 3搭建Python开发环境及常用插件安装 转载

    Sublime text 3搭建Python开发环境及常用插件安装 一.环境准备 1.官方网站地址 2.Windows 10 3.Sublime Text 3 + 官网购买license(Just a ...

  9. 【转】使用Eclipse搭建Python开发环境

    因为要进行自动化测试,所以要搭建Python开发环境.这里将使用Eclipse+pyDev进行搭建,在此作为笔记记录下来. 需要的组件: 1.Eclipse SDK 3.7(这里将不再叙述Eclips ...

随机推荐

  1. 利用 ProtoThreads实现Arduino多线程处理(1)

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 这几天和群里小V同学讨论一个项目时,偶然发现了 ProtoThreads,简称PT,用其来实 ...

  2. 解决Skyline6.5多球对比时,自动运行TerraExplorer软件的问题

    如果你的操作系统是Win7 64位,在运行Skyline6.5提供的ITE3DWindowEx控件实现多球对比时,启动程序调试运行时,却自动运行了TerraExplorer软件, 这时候你会发现for ...

  3. HNOI2017做题笔记

    HNOI2017 单旋(线段树.set) 手玩旋转操作(忽略手玩过程)可以发现:一次单旋对原树的变化实际上很小. 对于父子关系,单旋最小值会将\(Spaly\)上最小值变成原来根的父亲,将最小值的点右 ...

  4. Java 面试题 == 和 equals 的区别

    int和Integer的区别 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而int变量不需要 3.Integer实际是对象的引 ...

  5. WPF中的Bitmap与byte

    原文:WPF中的Bitmap与byte public MainWindow() { InitializeComponent(); byte[] b = GetPictureData(@"F: ...

  6. 【php增删改查实例】第十六节 - 用户新增

    6.1工具栏 <div id="toolbar"> <a href="javascript:openDialog()" class=" ...

  7. 一文让你完全弄懂Stegosaurus

    国内关于 Stegosaurus 的介绍少之又少,一般只是单纯的工具使用的讲解之类的,并且本人在学习过程中也是遇到了很多的问题,基于此种情况下写下此文,也是为我逝去的青春时光留个念想吧~ Stegos ...

  8. React.js 开发参见问题 Q&A

    文章中我整理了 React.js 开发过程中一些参见问题的解答汇总,供大家参考. 1. 一些课程资源 课程完整的思维导图请查考文章:React.js 入门与实战课程思维导图,我使用的思维导图软件是 M ...

  9. Python进阶量化交易场外篇5——标记A股市场涨跌周期

    新年伊始,很荣幸笔者的<教你用 Python 进阶量化交易>专栏在慕课专栏板块上线了,欢迎大家订阅!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外会陆续推出一些手记来辅助同学们学习 ...

  10. 期末总结:LINUX内核分析与设计期末总结

    朱国庆原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一,心得体会 关于网上听课这 ...