简体   繁体   English

lua 5.2 C api中的语法更改

[英]Syntax Change in lua 5.2 C api

I was trying to compile the example provided in the book Programming in Lua 我试图编译“ Lua编程 ”一书中提供的示例

But only works for lua 5.1, What are the steps to do it on 5.2? 但仅适用于lua 5.1, 在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: gcc test01.c -I/usr/include/lua5.2 -L/usr/lib/x86_64-linux-gnu -llua5.2后出现以下错误:

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

Thank you in advance. 先感谢您。

luaopen() is not used anymore, it's replaced by luaL_newstate , you can use luaL_newstate to create a state with a standard allocation function: luaopen()不再使用,它​​被luaL_newstate取代,你可以使用luaL_newstate创建一个具有标准分配函数的状态:

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

This API is changed since Lua 5.1 自Lua 5.1以来,此API已更改

尝试:

lua_State *L = lua_newstate();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM