2011-12-05 24 views
6

Estoy escribiendo una prueba simple de incrustar Lua en un programa C.Declaración implícita de luaL_openlibs

Tengo el mismo problema en Windows/Mingw y Linux. Este es el comando gcc utilizo en Linux:

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

En Windows:

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

Tanto en caso de que tenga la siguiente advertencia:

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

funciona el programa, pero tal vez no use ninguna libra Lua estándar en ella? ¿Por qué recibo esta advertencia? Veo luaL_openLibs definición en lauxlib.h!

Aquí está 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; 

} 

Aquí es 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 

Respuesta

10

yo sepa & en la instalación de la función 5.1.4 reside en lualib.h, no lauxlib.h

+0

Parece ser su lugar de descanso final; es 5.3 y esto sigue siendo cierto. – Qix

2

Puede ser luaL_openlibs define en un bloque ifdef.

Use -E con gcc para obtener la fuente después del preprocesamiento. Tubo. Grep.

Cuestiones relacionadas