I'm writing a simple test of embedding Lua into a C program.
I have the same issue on 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 case 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 do I get this warning ? I see luaL_openLibs definition in lauxlib.h !
Here is the C part:
#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 Lua part:
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
                AFAIK & in my 5.1.4 installation the function resides in lualib.h, not lauxlib.h
May be luaL_openlibs defines in a ifdef block.
Use -E with gcc to get the source after preprocessing. Pipe. Grep.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With