2011-12-05 41 views
6

Tôi đang viết một thử nghiệm đơn giản về nhúng Lua vào một chương trình C.Tuyên bố ngầm của luaL_openlibs

Tôi gặp sự cố tương tự trên Windows/Mingw và Linux. Đây là lệnh gcc tôi sử dụng trên Linux:

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

Trên Windows:

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

Trong cả hai trường hợp tôi có cảnh báo sau đây:

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

Các công trình chương trình nhưng có lẽ tôi không sử dụng bất kỳ lib Lua tiêu chuẩn nào trong đó? Tại sao tôi nhận được cảnh báo này? Tôi thấy định nghĩa luaL_openLibs trong lauxlib.h!

Dưới đây là phần 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; 

} 

Dưới đây là phần 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 

Trả lời

10

AFAIK & trong cài đặt 5.1.4 của tôi chức năng nằm trong lualib.h, không lauxlib.h

+0

Xuất hiện ở nơi an nghỉ cuối cùng; nó là 5,3 và điều này vẫn đúng. – Qix

2

Có thể luaL_openlibs định nghĩa trong khối ifdef.

Sử dụng -E với gcc để lấy nguồn sau khi xử lý trước. Ống. Grep.