黑白程式

黑白程式

导航

lua "Hello, world!"[转]

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;

posted on 2010-03-01 09:46  黑白程式  阅读(474)  评论(1)    收藏  举报