2011-12-05 21 views
6

Lua'nın bir C programına gömülmesi için basit bir test yazıyorum.luaL_openlibs'nin örtülü beyanı

Windows/Mingw ve Linux'ta da aynı sorun var. Windows'ta

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

: Aşağıdaki uyarı var hem durumda

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

: Burada Linux üzerinde kullanmak gcc komutu belki

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

programı eserler ama İçinde standart Lua libs kullanmayın? Neden bu uyarıyı alıyorum? lauxlib.h'da luaL_openLibs tanımını görüyorum!

İşte
#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; 

} 

Lua parçasıdır: Burada

C parçasıdır fonksiyon lualib.h yatar benim 5.1.4 kurulumda AFAIK &

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 

cevap

10

, lauxlib.h değil

+0

Son dinlenme yeri olduğu ortaya çıktı; 5.3 ve bu hala geçerli. – Qix

2

luaL_openlibs, bir ifdef bloğunda tanımlanabilir.

Ön işleme sonrasında kaynağı almak için gcc ile -E kullanın. Boru. Grep.