尝试使用mingw,未定义的引用错误构建和编译lua 5.3.3

时间:2017-01-20 15:07:46

标签: c windows lua

所以基本上我得到了lua5.3.3源代码,我试图用mingw构建它

到目前为止我所做的是我在msys中完成了整个操作,然后复制了lib文件和bin文件并将文件包含到mingw相应的文件夹中

然而,当我尝试实际编译使用它的应用程序时,我得到这些错误

这是我用来编译使用lua

的程序的命令
gcc syx.cpp -llua

C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0xf): undefined reference to `luaL_newstate()'
C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0x21): undefined reference to `luaL_openlibs(lua_State*)'
C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0x3e): undefined reference to `luaL_loadfilex(lua_State*, char const*, char const*)'
C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0x77): undefined reference to `lua_pcallk(lua_State*, int, int, int, int, int (*)(lua_State*, int, int))'
C:\Users\User\AppData\Local\Temp\cckJPF8N.o:syx.cpp:(.text+0x87): undefined reference to `lua_close(lua_State*)'
collect2.exe: error: ld returned 1 exit status

这是文件(非常基本的),以防你需要看到它

#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;
}

我知道库文件存在,因为它是用mingw创建的,即liblua.a,它位于我的mingw lib文件夹中,以及与lua相关的其他文件,例如lua.exe luac.exe包含文件等等所以我我不确定还缺少什么

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案

结果是gcc正在修改库头中的符号(无论这意味着什么)

需要做的是标题需要包含在extern“C”{// headers}中以使其正常工作

参考在这里:

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

只是要清楚,这是一个有效的例子:

#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;
}