Syntax Change in lua 5.2 C api

I tried to compile the example provided in the book Programming in Lua

But only works for lua 5.1, what are the steps for doing this on 5.2?

This is the code I am using

#include <stdio.h>
#include <string.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

int main (void) {
  char buff[256];
  int error;
  lua_State *L = lua_open();   /* opens Lua */
  luaL_openlibs(L);  
  while (fgets(buff, sizeof(buff), stdin) != NULL) {
    error = luaL_loadbuffer(L, buff, strlen(buff), "line") ||
      lua_pcall(L, 0, 0, 0);
    if (error) {
      fprintf(stderr, "%s", lua_tostring(L, -1));
      lua_pop(L, 1);  /* pop error message from the stack */
    }
  }
  lua_close(L);
  return 0;
}

      

After compiling with, gcc test01.c -I/usr/include/lua5.2 -L/usr/lib/x86_64-linux-gnu -llua5.2

I get the following errors:

test01.c: In function β€˜main’:
test01.c:10:18: warning: initialization makes pointer from integer without a cas
t [enabled by default]                                                         
   lua_State *L = lua_open();   /* opens Lua */
                  ^
/tmp/ccyPRlV3.o: In function `main':
test01.c:(.text+0x21): undefined reference to `lua_open'
collect2: error: ld returned 1 exit status

      

Thanks in advance.

+4


source to share


2 answers


luaopen()

is no longer used, it is replaced by luaL_newstate

, you can use luaL_newstate

to create state with a standard distribution function:

lua_State *L = luaL_newstate();    /* opens Lua */
luaL_openlibs(L);                  /* opens the standard libraries */

      



This API has changed since Lua 5.1

+9


source


Try:



lua_State *L = luaL_newstate();

      

+2


source







All Articles