Связывание ошибок с помощью lua и luabind — mingw

Я использую luabind для привязки моих классов C++ к lua, я могу получить luabind и большинство lua. функции работают, но если я попытаюсь использовать luaL_openlibs(), я получу:

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.


person chipgw    schedule 22.07.2012    source источник
comment
Похоже, ваша сборка luabind уже включает библиотеку lua. Таким образом, у вас есть несколько определений одного и того же типа.   -  person    schedule 22.07.2012
comment
@VladLazarenko Я знаю, но почему у меня нет luaL_openlibs, если есть почти все остальные и как это исправить? Я построил его, как указано на веб-сайте... Думаю, это может помочь, если я выясню, что еще не работает...   -  person chipgw    schedule 23.07.2012
comment
Я просмотрел исходники и думаю, что проблема в том, что luabind не включает lualib.h, который является заголовком, в котором определен luaL_openlibs. иначе я должен был собрать его или получить из репозиториев Ubuntu, у меня все еще была бы эта проблема ... есть ли способ игнорировать множественное определение и использовать версию функций liblua.a?   -  person chipgw    schedule 24.07.2012


Ответы (1)


Я понял.

Проблема была в том, что я ссылался на lua в статической библиотеке. В итоге я скачал http://sourceforge.net/projects/luabinaries/files/5.1.4/Windows%20Libraries/lua5_1_4_Win32_dllw4_lib.zip, пересобрав luabind для ссылки на него и настроив мой проект также для ссылки на него.

person chipgw    schedule 25.07.2012