c - forsøger at opbygge og kompilere lua 5.3.3 med mingw, undefined referencefejl

Indlæg af Hanne Mølgaard Plasc

Problem



Så dybest set fik jeg lua5.3.3 kildekoden, og jeg forsøger at bygge den med mingw


hvad jeg har gjort hidtil er, at jeg gjorde hele operationen i msys og derefter kopieret over lib-filer og bin-filer og indeholder filer til at mingw passende mapper


men når jeg forsøger faktisk at kompilere et program, der bruger det, får jeg disse fejl


dette er kommandoen, jeg plejede at kompilere mit program, der bruger lua


gcc syx.cpp -llua

C:UsersUserAppDataLocalTempcckJPF8N.o:syx.cpp:(.text+0xf): undefined reference to `luaL\_newstate()'
C:UsersUserAppDataLocalTempcckJPF8N.o:syx.cpp:(.text+0x21): undefined reference to `luaL\_openlibs(lua\_State*)'
C:UsersUserAppDataLocalTempcckJPF8N.o:syx.cpp:(.text+0x3e): undefined reference to `luaL\_loadfilex(lua\_State*, char const*, char const*)'
C:UsersUserAppDataLocalTempcckJPF8N.o:syx.cpp:(.text+0x77): undefined reference to `lua\_pcallk(lua\_State*, int, int, int, int, int (*)(lua\_State*, int, int))'
C:UsersUserAppDataLocalTempcckJPF8N.o:syx.cpp:(.text+0x87): undefined reference to `lua\_close(lua\_State*)'
collect2.exe: error: ld returned 1 exit status


og her er filen (meget grundlæggende), hvis du skal se den


#include <stdio.h>

#include <lua5.3/lua.h>
#include <lua5.3/lualib.h>
#include <lua5.3/lauxlib.h>

/* the Lua interpreter */
lua\_State* L;

int main ( int argc, char *argv[] )
{
   L = luaL\_newstate();

   luaL\_openlibs(L);

   luaL\_dofile(L, "test.lua");

   /* cleanup Lua */
   lua\_close(L);

        return 0;
}


jeg ved, at bibliotekets fil eksisterer, da den blev oprettet med mingw nemlig liblua.a som sidder i min mingw lib mappe, samt de andre filer relateret til lua som lua.exe luac.exe, der indeholder filer osv. så jeg er ikke sikker hvad der mangler yderligere

Bedste reference


Okay jeg fandt løsningen


viser sig, at gcc mangler symbolerne fra bibliotekets header (hvad det betyder)


hvad der skal gøres, skal overskrifterne pakkes i en ekstern 'C' {//headers} for at få det til at fungere


referencen er her:


http://www.linuxquestions.org/questions/programming-9/undefined-reference-error-when-using-lua-api-892782/[4]


og bare for at være klar, her er et fungerende eksempel:


#include <stdio.h>

extern "C"{
#include <lua5.3/lua.h>
#include <lua5.3/lualib.h>
#include <lua5.3/lauxlib.h>
}

/* the Lua interpreter */
lua\_State* L;

int main ( int argc, char *argv[] )
{
   L = luaL\_newstate();

   luaL\_openlibs(L);

   luaL\_dofile(L, "test.lua");

   /* cleanup Lua */
   lua\_close(L);

        return 0;
}