2011-12-05 13 views
6

Sto scrivendo un semplice test per incorporare Lua in un programma C.Dichiarazione implicita di luaL_openlibs

Ho lo stesso problema su Windows/Mingw e Linux. Ecco il comando gcc che uso su Linux:

gcc -Wall -o test_lua lua_test.c -I/usr/include/lua5.1 -llua5.1 

Su Windows:

gcc -Wall -o test_lua.exe lua_test.c -llua5.1 

In entrambi i casi ho il seguente avviso:

warning: implicit declaration of function 
       'luaL_openlibs' [-Wimplicit-function-declaration] 

funziona il programma ma forse non usare nessuna lib di Lua standard al suo interno? Perché ricevo questo avviso? Vedo la definizione luaL_openLibs in lauxlib.h!

Ecco la parte C:

#include <lua.h> 
#include <lauxlib.h> 
#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, char *argv[]) { 

    int status; 
    lua_State *L; 

    L = luaL_newstate(); 

    // Init lua 
    luaL_openlibs(L); 

    // Load script 
    status = luaL_loadfile(L,"lua_test.lua"); 
    if (status) { 
    fprintf(stderr,"Couldn't load file\n"); 
    exit(1); 
    } 

    // Push data 
    lua_pushnumber(L, 5000); 
    lua_setglobal(L, "clife"); 
    lua_pushnumber(L, 6000); 
    lua_setglobal(L, "ttime"); 
    lua_pushnumber(L, 3000); 
    lua_setglobal(L, "atime"); 

    // Run script 
    int result = lua_pcall(L, 0, LUA_MULTRET, 0); 
    if (result) { 
    fprintf(stderr,"Failed to run script: %s\n", lua_tostring(L,-1)); 
    exit(1); 
    } 

    // Value at top of the stack is the result 
    const char *schedule = lua_tostring(L,-1); 

    fprintf(stdout,"Computed schedule is: %s\n", schedule); 

    // Close lua 
    lua_pop(L, 1); 
    lua_close(L); 

    return 0; 

} 

Ecco la parte Lua:

io.write("lua_test.lua -- will generate schedule\n") 

io.write("Wizard life is " .. clife .. "\n") 

schedule = "" 
ctime = ttime - atime 
if clife > 4500 then 
    schedule = schedule .. "[" .. ctime .. ",p]" 
    schedule = schedule .. "[" .. ctime+500 .. ",a]" 
    schedule = schedule .. "[" .. ctime+1000 .. ",i]" 
    schedule = schedule .. "[" .. ctime+1500 .. ",n]\n" 
else 
    schedule = schedule .. "[" .. ctime .. ",d]" 
    schedule = schedule .. "[" .. ctime+500 .. ",r]" 
    schedule = schedule .. "[" .. ctime+1000 .. ",a]" 
    schedule = schedule .. "[" .. ctime+1500 .. ",i]" 
    schedule = schedule .. "[" .. ctime+1500 .. ",n]\n" 
end 

io.write("Returning " .. schedule .. "\n"); 

return schedule 

risposta

10

AFAIK & nella mia installazione 5.1.4 la funzione risiede in lualib.h, non lauxlib.h

+0

sembra essere il suo luogo di riposo finale; è 5.3 e questo è ancora vero. – Qix

2

Può essere luaL_openlibs definito in un blocco ifdef.

Utilizzare -E con gcc per ottenere l'origine dopo la preelaborazione. Tubo. Grep.

Problemi correlati