Implicit declaration of luaL_openlibs

I am writing a simple test to include Lua in a C program.

I have the same problem for Windows / Mingw and Linux. Here is the gcc command I use on Linux:

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

On Windows:

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

In both cases, I have the following warning:

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

The program works, but maybe I don’t use any standard Lua libs in it? Why am I getting this warning? I see the definition of luaL_openLibs in lauxlib.h !

Here is part 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; } 

Here is the part of 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 
+6
source share
2 answers

AFAIK and in my 5.1.4 installation, the function is in lualib.h, not lauxlib.h

+10
source

Maybe luaL_openlibs is defined in the ifdef block.

Use -E with gcc to get the source after preprocessing. Pipe. Grep.

+2
source

Source: https://habr.com/ru/post/903110/


All Articles