cross compile کردن Lua - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

cross compile کردن Lua

+2 امتیاز

سلام!

می خواستم Lua رو روی Fedora 20 برای cross compile ،Windows کنم...

این طور که فهمیدم باید بنویسم make و جلوش platform رو مشخص کنم... برای Linux می زنم linux و مشکلی ندارم... اما برای Windows... الان چند تا گزینه هست:

aix ansi bsd freebsd generic linux macosx mingw posix solaris

خوب من می زنم mingw... کامپایلر رو هم از کامپایلر پیش فرض به x86_64-w64-mingw32-gcc تغییر می دم... قبلش make clean رو هم می زنم... اما به مشکل می خورم... خروجی make mingw CC=x86_64-w64-mingw32-gcc این هست:


cd src && make mingw
make[1]: Entering directory `/home/bloomy/Desktop/lua/src'
make "LUA_A=lua52.dll" "LUA_T=lua.exe" \
"AR=x86_64-w64-mingw32-gcc -shared -o" "RANLIB=strip --strip-unneeded" \
"SYSCFLAGS=-DLUA_BUILD_AS_DLL" "SYSLIBS=" "SYSLDFLAGS=-s" lua.exe
make[2]: Entering directory `/home/bloomy/Desktop/lua/src'
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lua.o lua.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lapi.o lapi.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lcode.o lcode.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lctype.o lctype.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o ldebug.o ldebug.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o ldo.o ldo.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o ldump.o ldump.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lfunc.o lfunc.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lgc.o lgc.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o llex.o llex.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lmem.o lmem.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lobject.o lobject.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lopcodes.o lopcodes.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lparser.o lparser.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lstate.o lstate.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lstring.o lstring.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o ltable.o ltable.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o ltm.o ltm.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lundump.o lundump.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lvm.o lvm.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lzio.o lzio.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lauxlib.o lauxlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lbaselib.o lbaselib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lbitlib.o lbitlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lcorolib.o lcorolib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o ldblib.o ldblib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o liolib.o liolib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lmathlib.o lmathlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o loslib.o loslib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o lstrlib.o lstrlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o ltablib.o ltablib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o loadlib.o loadlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL    -c -o linit.o linit.c
x86_64-w64-mingw32-gcc -shared -o lua52.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 loadlib.o linit.o 
strip --strip-unneeded lua52.dll
x86_64-w64-mingw32-gcc -o lua.exe -s  lua.o lua52.dll -lm  
make[2]: Leaving directory `/home/bloomy/Desktop/lua/src'
make "LUAC_T=luac.exe" luac.exe
make[2]: Entering directory `/home/bloomy/Desktop/lua/src'
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL     -c -o luac.o luac.c
ar rcu liblua.a 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 loadlib.o linit.o 
ranlib liblua.a
x86_64-w64-mingw32-gcc -o luac.exe   luac.o liblua.a -lm  
liblua.a: could not read symbols: Archive has no index; run ranlib to add one
collect2: error: ld returned 1 exit status
make[2]: *** [luac.exe] Error 1
make[2]: Leaving directory `/home/bloomy/Desktop/lua/src'
make[1]: *** [mingw] Error 2
make[1]: Leaving directory `/home/bloomy/Desktop/lua/src'
make: *** [mingw] Error 2

یعنی چی؟... چی کار باید بکنم؟...

 

ویرایش:

خوب الان مشکل قبلی حل شد ولی یه چیز جدید اومده! وقتی این رو می زنم:

make mingw CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-gcc-ar WINDRES=x86_64-w64-mingw32-gcc-windres RANLIB=x86_64-w64-mingw32-gcc-ranlib

می گه:

cd src && make mingw
make[1]: Entering directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
make "LUA_A=lua52.dll" "LUA_T=lua.exe" \
"AR=x86_64-w64-mingw32-gcc -shared -o" "RANLIB=strip --strip-unneeded" \
"SYSCFLAGS=-DLUA_BUILD_AS_DLL" "SYSLIBS=" "SYSLDFLAGS=-s" lua.exe
make[2]: Entering directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lua.o lua.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lapi.o lapi.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lcode.o lcode.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lctype.o lctype.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o ldebug.o ldebug.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o ldo.o ldo.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o ldump.o ldump.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lfunc.o lfunc.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lgc.o lgc.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o llex.o llex.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lmem.o lmem.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lobject.o lobject.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lopcodes.o lopcodes.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lparser.o lparser.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lstate.o lstate.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lstring.o lstring.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o ltable.o ltable.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o ltm.o ltm.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lundump.o lundump.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lvm.o lvm.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lzio.o lzio.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lauxlib.o lauxlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lbaselib.o lbaselib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lbitlib.o lbitlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lcorolib.o lcorolib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o ldblib.o ldblib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o liolib.o liolib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lmathlib.o lmathlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o loslib.o loslib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o lstrlib.o lstrlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o ltablib.o ltablib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o loadlib.o loadlib.c
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_BUILD_AS_DLL                   -c -o linit.o linit.c
x86_64-w64-mingw32-gcc -shared -o lua52.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 loadlib.o linit.o 
strip --strip-unneeded lua52.dll
x86_64-w64-mingw32-gcc -o lua.exe -s  lua.o lua52.dll -lm  
make[2]: Leaving directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
make "LUAC_T=luac.exe" luac.exe
make[2]: Entering directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
x86_64-w64-mingw32-gcc -O2 -Wall -DLUA_COMPAT_ALL                    -c -o luac.o luac.c
x86_64-w64-mingw32-gcc-ar liblua.a 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 loadlib.o linit.o 
sorry - this program has been built without plugin support
make[2]: *** [liblua.a] Error 1
make[2]: Leaving directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
make[1]: *** [mingw] Error 2
make[1]: Leaving directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
make: *** [mingw] Error 2

متوجه نمی شم منظور از این حرفا چیه!:

sorry - this program has been built without plugin support
make[2]: *** [liblua.a] Error 1
make[2]: Leaving directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
make[1]: *** [mingw] Error 2
make[1]: Leaving directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
make: *** [mingw] Error 2
سوال شده شهریور 16, 1393  بوسیله ی مسعود لپه‌چی (امتیاز 928)   12 31 50
ویرایش شده شهریور 17, 1393 بوسیله ی مسعود لپه‌چی
lua52.dll و lua.exe داره درست ساخته میشه
اون luac.exe بخاطراین که فایلliblua.a  اشتباه ساخته شده ساخته نمیشه
فکر می کنم اون دستور ar درست نیست شاید باید مثل بقیه دستور ها x86_64-w64-mingw32-ar باشه ؟!!(ranlibهم به همین شکل ؟!)
من الان  داخل github  رو نگاه کردم این فایل bash رو دیدم https://gist.github.com/voltagex/3696867
ar ببینید چطور استفاده شده : export AR=${MINGW_BIN_PREFIX}ar
مشکل از همین اسم اشتباه هستش به x86_64-w64-mingw32-ar و x86_64-w64-mingw32-ranlib تغییر بدید درست میشه
ممنونم!
با این دستور make کردم، lua.exe ساخته شد، با WINE چک کردم کار کرد!:
make mingw CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-gcc-ar WINDRES=x86_64-w64-mingw32-gcc-windres RANLIB=x86_64-w64-mingw32-gcc-ranlib
البته آخر خروجی به این شکل هست که اولش فکر کردم بازم نشد که...!:
...
sorry - this program has been built without plugin support
make[2]: *** [liblua.a] Error 1
make[2]: Leaving directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
make[1]: *** [mingw] Error 2
make[1]: Leaving directory `/home/bloomy/Desktop/lua-1/luajit-2/src'
make: *** [mingw] Error 2
ولی مثل این که شد!

ویرایش:
نمی دونم ولی مثل این که با این "sorry - this program has been built without plugin support" مشکل ساز دارم!...
این mingw که دارید پلاگین هاش build شدن ؟! باید زمان build کردن خود mingw
--enable-plugins رو بزنید
https://gcc.gnu.org/wiki/plugins
راستی این lua باینری مخصوص ویندوز هم داره .
دلیل خاصی دارید برای build کردن ؟
راستش mingw رو خودم build نکردم... با yum نصب کردم:
sudo yum install mingw64-gcc
در مورد این که چرا Lua رو برای MinGW می خواستم build کنم:
تولید برنامه ی Windows ـی Standalone با LuaJIT روی Linux
http://goo.gl/3r6prV
mingw رو از resposity های دیگه بگیرید شاید اونا با اون flag بیلد شده باشن  
یکبار هم اینطوری تست کنید شاید درست بشه:
make mingw CC=x86_64-w64-mingw32-gcc AR=ar WINDRES=x86_64-w64-mingw32-gcc-windres RANLIB=x86_64-w64-mingw32-gcc-ranlib
داخل همون دستور  اول یکبار هم ar rcus  رو تست کنید

پاسخ شما

اسم شما برای نمایش (دلخواه):
از ایمیل شما فقط برای ارسال اطلاعات بالا استفاده میشود.
تایید نامه ضد اسپم:

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
...