【转】
学了一段时间Lua,显然直接在项目中使用是很不方便,google了一下,似乎大家都对luabind这个lua包装类青睐有加,于是我也随大势想用用看。
先做好准备工作,下载了luabin 0.8.1源码,Boost 1.3.8源码和lua 5.1.4源码,编译环境是VS2008 SP1。之前在网上看到一些文章说这些开源软件之间的版本依赖比较敏感,可能会有这样那样的问题,动手之前有些惶恐。
幸运的是,编译过程很顺利,如下:
1.编译lua 5.1.4
进入VS2008的命令行工具,定位到lua的源码目录下,执行命令etc\luavs.bat,没什么问题的话很快就可以编译好lua,得到lua51.lib和lua51.dll。
2.编译luabind
解压下载回来的luabind压缩包,假设解压到d:\luabind-0.8.1\,Boost解压到d:\boost 1_38_0\,lua解压到d:\lua 5.1.4\
在VS中新建一个静态库项目,将d:\luabind-0.8.1\src下的源码全部添加到项目中,然后在项目中新建luabind和luabind\detail\两个虚拟文件夹,对应的将d:\luabind-0.8.1\luabind和d:\luabind-0.8.1\luabind\detail下的文件添加到文件夹中。
然后为项目添加附加包含目录,右键点击项目节点->属性->配置属性->C\C++标签下,在附加包含目录中填入d:\luabind-0.8.1\;d:\boost 1_38_0\k;d:\lua 5.1.4\src\。然后修改项目字符集为多字节字符集。
准备就绪,生成项目。在我的环境中编译很顺利,没有出现任何问题,成功后会得到luabind.lib。
接下来就按照惯例来写一个hello world程序作为使用luabind的第一步。
在VS中新建一个控制台项目,类型为DLL,命名项目为Hello World,然后键入以下代码:
#include "stdafx.h" 2#include <iostream> 3#include <luabind/luabind.hpp> 4 5void greet() 6{ 7 std::cout << "hello world!\n"; 8} 9 10extern "C" int __declspec(dllexport) init(lua_State* L) 11{ 12 using namespace luabind; 13 14 open(L); 15 16 module(L) 17 [ 18 def("greet", &greet) 19 ]; 20 21 return 0; 22}
注意,在Windows环境下init函数之前是要加__declspec(dllexport)才能将函数导出的,而luabind的文档中的环境是linux,默认不用加__declspec(dllexport)也可以导出(就因为这个折腾了我半天才把hello word成功运行)。
编译项目,(记得将luabind.lib和lua51.lib添加到链接选项中:项目属性->连接器->输入->附加依赖文件,加入luabind.lib和lua51.lib)。
将hello world.dll放到lua51.dll和lua.exe所在的目录下。
打开lua命令行,键入:
转自:http://www.cppblog.com/eros/archive/2009/04/29/81508.aspx
VS2008下编译luabind 0.8.1