lua "Hello, world!"
Lua 2008-09-20 16:03:01 阅读372 评论0 字号:大中小
WinXP SP2 + VS2008 + lua 5.1.4 + luabind 0.7
继《VC下编译lua和luabind纪实》后,我在网上随便搜了个lua例程准备try一下:
// from: http://blog.csdn.net/yuantao/archive/2006/02/17/601036.aspx
//这是lua所需的三个头文件
//当然,你需要链接到正确的lib
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"int main(int argc, char *argv[])
{
lua_State *L = lua_open();
luaopen_base(L);
luaopen_io(L);const char *buf = "print('hello, world!')";
lua_dostring(buf);lua_close(L);
return 0;
}
屁颠屁颠的建了个C++ Win32 ConsoleApplication工程。编译-链接,慢,井喷了7个诸如error LNK2001: 无法解析的外部符号 "void __cdecl lua_close(struct lua_State *)"...的链接错误。搜啊搜,终于在http://www.gamedev.net/community/forums/topic.asp?topic_id=415283 发现了奥妙,原来上面那几个#include需要进行extern "C"操作。
链接通过,跑跑。CRUSH --> PANIC: unprotected error in call to Lua API (no calling environment)。同理,搜啊搜,终于在http://blog.csdn.net/nscboy/archive/2008/07/14/2649593.aspx上发现了解决方法。原来是lua的版本问题,新版本的lua已经不支持luaopen_*操作啦,用一个luaL_openlibs(L);就完全搞定了。
最终代码如下:
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}int main(int argc, char *argv[])
{
lua_State *L = lua_open();
luaL_openlibs(L);const char *buf = "print('hello, world!')";
luaL_dostring(L, buf);
lua_close(L);
return 0;