2012-07-22 86 views
0

我使用luabind绑定我的C++类到Lua,我可以得到luabind最Lua函数的工作,但如果我尝试使用luaL_openlibs()我得到:用LUA和luabind链接错误 - MinGW的

undefined reference to 'luaL_openlibs' 
collect2: ld returned 1 exit status 

如果我添加-llua的链接我得到:

c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x15c): multiple definition of 'lua_gettop' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000253.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x170): multiple definition of 'lua_settop' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000296.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x244): multiple definition of 'lua_pushvalue' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000278.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x274): multiple definition of 'lua_type' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000307.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x388): multiple definition of 'lua_touserdata' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000306.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x414): multiple definition of 'lua_pushnil' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000274.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x42c): multiple definition of 'lua_pushnumber' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000275.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x450): multiple definition of 'lua_pushinteger' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000271.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x46c): multiple definition of 'lua_pushboolean' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000268.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x85c): multiple definition of 'lua_concat' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000235.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x8e8): multiple definition of 'lua_pushlstring' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000273.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x97c): multiple definition of 'lua_error' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000240.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0xb5c): multiple definition of 'lua_pcall' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000267.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0xbdc): multiple definition of 'lua_pushcclosure' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000269.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0xf98): multiple definition of 'lua_pushstring' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000276.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x104c): multiple definition of 'lua_settable' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000295.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x10d4): multiple definition of 'lua_rawgeti' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000282.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x111c): multiple definition of 'lua_rawget' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000281.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x1278): multiple definition of 'lua_objlen' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000266.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x12ec): multiple definition of 'lua_tolstring' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000302.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x1368): multiple definition of 'lua_tointeger' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000301.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lapi.o):lapi.c:(.text+0x13a4): multiple definition of 'lua_tonumber' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000303.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lstate.o):lstate.c:(.text+0xf4): multiple definition of 'lua_close' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000234.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lauxlib.o):lauxlib.c:(.text+0x40): multiple definition of 'luaL_newstate' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000219.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lauxlib.o):lauxlib.c:(.text+0x20c): multiple definition of 'luaL_loadfile' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000216.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lauxlib.o):lauxlib.c:(.text+0x5e0): multiple definition of 'luaL_unref' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000229.o):(.text+0x0): first defined here 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../liblua.a(lauxlib.o):lauxlib.c:(.text+0x664): multiple definition of 'luaL_ref' 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libluabindd.dll.a(d000226.o):(.text+0x0): first defined here 
collect2: ld returned 1 exit status 

我建luabind自己,因为我能找到预编译的MinGW二进制文件。

+0

看来你的luabind构建已经包含lua库。所以你有相同类型的多个定义。 – 2012-07-22 03:15:24

+0

@VladLazarenko我知道,但为什么我没有luaL_openlibs,如果我几乎所有的休息,我该如何解决?我建立它作为网站指示...我想这可能会帮助,如果我找出还有什么不工作... – chipgw 2012-07-22 21:44:18

+0

我看着的来源,我认为问题是luabind不包括lualib.h,这是头文件中定义了luaL_openlibs,但如果我修改了luabind来包含它,那么它只适用于我构建的二进制文件,如果其他人构建它,或者我要从Ubuntu上的存储库中获取它,我仍然会遇到这个问题...有没有办法忽略多重定义并使用liblua.a版本的函数? – chipgw 2012-07-24 13:37:44

回答