(本文主要是是参考:点击打开链接的文章,然后加入自己的一些补充,在此感谢该作者)
一、建立lua源代码工程,编译lua的静态库
1、下载Lua源码
a.下载地址 点击打开链接 ,我下载的版本是lua5.2.3
b.下载后解压到一个目录下,比如E:\lua-5.2.3 版本不同,编程时使用的函数可能略有区别,但是影响不大
2、在VS2010中新建一个静态库项目a. 选择新建 Win32 console project(也就是控制台项目)
b. 在wizard界面选择 static Library(静态库)
c.不选择Precomplied Header(“预编译头”)
3、往工程中添加代码(Add -> Existing Item)a 添加E:\lua-5.2.3\src 目录下的*.h文件到项目的Header Files目录下(解决方案->右击“头文件”文件夹->添加->现有项)
b 添加E:\lua-5.2.3\src 目录下的*.c文件到项目的Source Files目录下(解决方案->右击“头文件”源件夹->添加->现有项)
4、(可选)添加附属目录
a Configuration Properties -> C/C++ -> General -> Additional Include Directories
添加E:\lua-5.1.5\src
(中文:右击lua项目->属性->配置属性->C/C++->常规->附加包含目录)
b Configuration Properties -> C/C++-> Advanced -> compile as
(中文:中文:右击解决方案->属性->配置属性->C/C++->高级->编译为->编译为C代码/TC)
这里的选择将影响后面代码中如何指定编译链接方式,后面的测试选择的是Compile as C code5、 (可选)生产项目 Build
如果是DEBUG mode 将在Debug目录下看到一个lua.lib文件,Release mode的lib文件在Release文件下
二、添加使用者
1.前边都是静态库的配置,后面添加一个项目尝试在C/C++代码中, 调用使用刚才的lua静态库(文件->添加->新建项目)
2.在解决方案中添加一个 Win32 console project,项目名称命名为luatest,后面wizard界面中的选项无需修改3.添加对lua项目的引用
a Common Properties -> Framework and References -> Add New References
(中文:右击luatest项目->属性->通用属性->框架和引用->添加新引用->选择之前创建的“lua”静态库项目)
选择lua项目(目前来说应该只有一个lua项目,我们在第一步骤中创建的静态库名称是lua)3、添加对头文件的include directory
a Configuration Properties -> C/C++ -> General -> Additional Include Directories -> 添加E:\lua-5.1.5\src
4.设置默认的项目,否则要去手动运行生成的可执行文件luatest.exe
Solution -> Properties -> Common Properties ->Startup Project ->Single startup project
(右击解决方案(注意不是lua项目,也不是luatest项目)->属性->通用属性->启动项目->选择单启动项目->选择luatest项目)
5.在项目的的在luatest.cpp文件中添加下面的代码
#include "stdafx.h"
/*extern "C"
{
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
}*/
#include "lua.hpp"
int _tmain(int argc, _TCHAR* argv[])
{
lua_State *L = ::luaL_newstate();
luaL_openlibs(L);
const char *buf = "print('Hello World')";
luaL_dostring(L,buf);
lua_close(L);
getc(stdin);
return 0;
return 0;
}
注意:
a.添加extern“C”一段,或者直接包含“lua.hpp”头文件都是可以的,因为"lua.hpp"头文件中写的就是extern"C"那段内容
b.lua-5.2.3版本使用的是luaL_newstate()函数获得解释器,而不是lua_open()函数了
6.按F5或Ctrl+F5,将会在控制台中输入了Hello World。