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
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