C API

入門Luaプログラミング』 201ページより、って試してみたら、

  • うちの環境だと、lua.h は lua50/lua.h。ライブラリは、-llua50
  • luaL_openlibs, luaL_dostring なしとエラー(luaL_openlibs は 5.1 で追加されたものと解説があった)
  • lauxlib.h を見ると、luaL_openlib, lua_dostring はある
/*
 * $ gcc -Wall -W -o 2008092802 -llua50 -llualib50 2008092802.c
 */

#include <stdio.h>
#include <lua50/lua.h>
#include <lua50/lauxlib.h>

int main(void) {
  lua_State *L;
  char sbuf[256];

  L = lua_open();
  /*luaL_openlibs(L);*/

  while (fgets(sbuf, 256, stdin)) {
    if (lua_dostring(L, sbuf)) {
      fprintf(stderr, "ERROR %s\n", lua_tostring(L, -1));
    }
  }
  lua_close(L);

  return 0;
}

で、

1
[string "1..."]:1: unexpected symbol near `1'
ERROR (null)
x=1
print(x)
[string "print(x)..."]:1: attempt to call global `print' (a nil value)
ERROR (null)