2015-08-08 2 views
-2

при построении Lua на окнах mingw491 дает неопределенную опорную ошибку. Ниже приводится вывод:Здание Lua на окнах дает неопределенную опорную ошибку

C:\Users\Alizadeh\Desktop\lua-5.3.0>mingw32-make PLAT=mingw 
cd src && mingw32-make mingw 
mingw32-make[1]: Entering directory 'C:/Users/Alizadeh/Desktop/lua-5.3.0/src' 
mingw32-make "LUA_A=lua53.dll" "LUA_T=lua.exe" \ 
"AR=gcc -std=gnu99 -shared -o" "RANLIB=strip --strip-unneeded" \ 
"SYSCFLAGS=-DLUA_BUILD_AS_DLL" "SYSLIBS=" "SYSLDFLAGS=-s" lua.exe 
mingw32-make[2]: Entering directory 'C:/Users/Alizadeh/Desktop/lua-5.3.0/src' 
g++ -c -o lua.o lua.c 
g++ -c -o lapi.o lapi.c 
g++ -c -o lcode.o lcode.c 
. 
. 
. 
g++ -c -o loadlib.o loadlib.c 
g++ -c -o linit.o linit.c 
gcc -std=gnu99 -shared -o lua53.dll lapi.o lcode.o lctype.o ldebug.o ldo.o ldump 
.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o 
ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lbitlib.o lcorolib.o 
ldblib.o liolib.o lmathlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o loadlib.o 
linit.o 
ldo.o:ldo.c:(.text+0xe5): undefined reference to `__cxa_allocate_exception' 
ldo.o:ldo.c:(.text+0x105): undefined reference to `__cxa_throw' 
ldo.o:ldo.c:(.text+0x234): undefined reference to `__cxa_begin_catch' 
ldo.o:ldo.c:(.text+0x24c): undefined reference to `__cxa_end_catch' 
ldo.o:ldo.c:(.rdata$_ZTIP11lua_longjmp[__ZTIP11lua_longjmp]+0xffff3fb8): undefin 
ed reference to `vtable for __cxxabiv1::__pointer_type_info' 
C:/Qt/Qt5.4.0/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../. 
./i686-w64-mingw32/bin/ld.exe: ldo.o: bad reloc address 0x0 in section `.rdata$_ 
ZTIP11lua_longjmp[__ZTIP11lua_longjmp]' 
collect2.exe: error: ld returned 1 exit status 
makefile:59: recipe for target 'lua53.dll' failed 
mingw32-make[2]: *** [lua53.dll] Error 1 
mingw32-make[2]: Leaving directory 'C:/Users/Alizadeh/Desktop/lua-5.3.0/src' 
makefile:116: recipe for target 'mingw' failed 
mingw32-make[1]: *** [mingw] Error 2 
mingw32-make[1]: Leaving directory 'C:/Users/Alizadeh/Desktop/lua-5.3.0/src' 
makefile:55: recipe for target 'mingw' failed 
mingw32-make: *** [mingw] Error 2 

Я использую MinGW (491) на windows7 и я хочу, чтобы связать его с Qt.

+0

Такие вопросы лучше всего подходит для [Lua список рассылки] (http://www.lua.org/lua-l.html) –

+1

Те части стандартной библиотеки C++, но вы, кажется, связываннии только библиотека C99 (-std = gnu99). –

+0

Спасибо, Но какое решение? – Mosi

ответ

2

Я нашел ответ. Я просто использовал г ++ вместо GCC и фиксированной :)

+1

Я столкнулся с этой же проблемой с той же платформой построения и переключился на g ++! Спасибо! – silentorb

+0

Использование g ++ вместо gcc будет работать для построения lua, но оно генерирует символы C++, что приведет к проблемам при использовании сгенерированной DLL. –

0

Решение добавить следующую строку в src/Makefile:

CXX= gcc -std=gnu99 

Или в более общем плане, чтобы установить CXX в зависимости от того, значение CC устанавливается.

Эта проблема возникает из-за того, что файлы Lua make полагаются на неявные правила и переменные GNU make (source). Это означает, что make должен вызвать $(CC) -c $(CFLAGS) $(CPPFLAGS) для создания файлов .o из файлов .c.

Однако mingw совершает звонки $(CXX) -c $(CFLAGS) $(CPPFLAGS). Это означает, что код Lua C скомпилирован как C++. Проблема обнаруживается в ссылке, так как здесь используется gcc, и он не может найти зависимые от C++ зависимости. Итак, у вас есть 2 решения:

  1. Заменить gcc на g ++ на время соединения (решение Моси). Который вы должны NOT do! Как вы закончите с символами C++ с искаженными именами, и вы не сможете использовать свою DLL во всем, кроме проектов на C++. Хотя ваш код не будет переносимым, поскольку любая другая Lua DLL не будет иметь символов C++.
  2. Замените g ++ gcc во время компиляции (см. Выше). В итоге вы получите действительные символы C в своей DLL.
Смежные вопросы