سلام!
در ارتباط با: مشکل بعد از تولید فایل object با LuaJIT
در اون سوال مشکلم با این دستورات حل شد:
luajit -b main.lua main.o
gcc -O2 -Wall -Wl,-E -o app app.c main.o -lm -ldl -llua
البته من به جای دستور آخر از این دستور استفاده می کنم:
gcc -O2 -Wall -Wl,-Bstatic -o app.exec app.c main.o -llua -lm -ldl -static
الان app.exec رو که یه برنامه ی Linux ـی هست دارم...
حالا می خوام یه خروجی برای Windows بگیرم... حالا ۳۲ بیتی یا ۶۴ بیتی اش برام فرقی نمی کنه...
این دستور رو می زنم:
x86_64-w64-mingw32-gcc -O2 -Wall -Wl,-Bstatic -o app.exec app.c main.o -llua -lm -ldl -static
می گه:
app.c:3:17: fatal error: lua.h: No such file or directory
#include "lua.h"
^
compilation terminated.
مخازن رو گشتم اما Lua رو برای MinGW پیدا نکردم... پس فکر کردم باید خودم build ـش کنم:
cross compile کردن Lua
build شد اما با یه پیغامی که تو اون سوال گذاشتم...
حالا اومدم دستور رو تغییر دادم:
x86_64-w64-mingw32-gcc -O2 -Wall -Wl,-Bstatic -o app.exec app.c main.o -I/home/bloomy/Desktop/lua-1/luajit-2/src -L/home/bloomy/Desktop/lua-1/luajit-2/src -lm -ldl -static
می گه:
/usr/lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld: cannot find -ldl
collect2: error: ld returned 1 exit status
بعد دوباره تغییر دادم:
x86_64-w64-mingw32-gcc -O2 -Wall -Wl,-Bstatic -o app.exec app.c main.o -I/home/bloomy/Desktop/lua-1/luajit-2/src -L/home/bloomy/Desktop/lua-1/luajit-2/src -Wl,-Bdynamic -lm -ldl -static
بعد دوباره تغییر دادم:
/tmp/ccD36HX1.o:app.c:(.text.startup+0xb): undefined reference to `luaL_newstate'
/tmp/ccD36HX1.o:app.c:(.text.startup+0x16): undefined reference to `luaL_openlibs'
/usr/lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld: /tmp/ccD36HX1.o: bad reloc address 0x16 in section `.text.startup'
collect2: error: ld returned 1 exit status
اگه دیدید خزعبل نوشتم چون به این قسمت ها وارد نیستم! حالا نمی دونم ولی حدس زدم شاید مشکلی با اون cross compile ـی که انجام دادم باشه!
راستی محتوای پوشه ی src ـم بعد از cross compile کردن این هست:
lapi.c lcorolib.o lfunc.c lmathlib.c loslib.o ltable.o lualib.h
lapi.h lctype.c lfunc.h lmathlib.o lparser.c ltablib.c lua.o
lapi.o lctype.h lfunc.o lmem.c lparser.h ltablib.o lundump.c
lauxlib.c lctype.o lgc.c lmem.h lparser.o ltm.c lundump.h
lauxlib.h ldblib.c lgc.h lmem.o lstate.c ltm.h lundump.o
lauxlib.o ldblib.o lgc.o loadlib.c lstate.h ltm.o lvm.c
lbaselib.c ldebug.c linit.c loadlib.o lstate.o lua52.dll lvm.h
lbaselib.o ldebug.h linit.o lobject.c lstring.c lua.c lvm.o
lbitlib.c ldebug.o liolib.c lobject.h lstring.h luac.c lzio.c
lbitlib.o ldo.c liolib.o lobject.o lstring.o luac.o lzio.h
lcode.c ldo.h llex.c lopcodes.c lstrlib.c luaconf.h lzio.o
lcode.h ldo.o llex.h lopcodes.h lstrlib.o lua.exe Makefile
lcode.o ldump.c llex.o lopcodes.o ltable.c lua.h
lcorolib.c ldump.o llimits.h loslib.c ltable.h lua.hpp
خلاصه ی کلام، چگونگی انجام کاری که این جا کردیم برای Windows روی Linux هست: مشکل بعد از تولید فایل object با LuaJIT
راستش هدفم این بود که یه زبان برنامه نویسی و IDE طراحی کنم... بعدا گفتم بذار فعلا از Lua که هست استفاده کنم برای انجام پروژه ام! الانم که می بینید این سوالا رو می پرسم سر این هست که می خوام خروجی [کم و بیش!] Standalone برای Platform های مختلف داشته باشه... فعلا باید این کارها رو خودم بتونم انجام بدم بعد بدم IDE انجام بده...
اگه کسی هم علاقه به همکاری داره خوش حال می شم!
ویرایش:
فعلا بی خیال static linking شدم... این دستور رو می زنم:
x86_64-w64-mingw32-gcc -O2 -Wall -o app.exe app.c main.o -llua -lm -ldl
می گه:
app.c:3:17: fatal error: lua.h: No such file or directory
#include "lua.h"
^
compilation terminated.
آخه چرا؟! مگه llua- رو نذاشتم؟!
این دستور رو هم می زنم:
x86_64-w64-mingw32-gcc -O2 -Wall -o app.exe app.c main.o -llua -I/home/bloomy/Desktop/lua-1/luajit-2/src -L/home/bloomy/Desktop/lua-1/luajit-2/src -lm -ldl
می گه:
/usr/lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld: cannot find -llua
collect2: error: ld returned 1 exit status
حالا llua- رو حذف می کنم:
x86_64-w64-mingw32-gcc -O2 -Wall -o app.exe app.c main.o -I/home/bloomy/Desktop/lua-1/luajit-2/src -L/home/bloomy/Desktop/lua-1/luajit-2/src -lm -ldl
می گه:
/tmp/ccd6RNic.o:app.c:(.text.startup+0xb): undefined reference to `luaL_newstate'
/tmp/ccd6RNic.o:app.c:(.text.startup+0x16): undefined reference to `luaL_openlibs'
/usr/lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld: /tmp/ccd6RNic.o: bad reloc address 0x16 in section `.text.startup'
collect2: error: ld returned 1 exit status
ای بابا! هر کاری می کنم یه چیزی می گه! نمی دونم کجای کار دارم اشتباه می کنم! تو مخازن هم چیز آماده ای برای Lua برای MinGW گیر نمی آرم...
ضمنا Wl,-E- و هم که برای Linux می زدم (نمی دونم چرا! ولی توی جوابی که برای Linux در Stack Overflow داده شده بود، بود!) اگه اضافه کنم:
/usr/lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld: warning: --export-dynamic is not supported for PE+ targets, did you mean --export-all-symbols?
/tmp/cc09ph3j.o:app.c:(.text.startup+0xb): undefined reference to `luaL_newstate'
/tmp/cc09ph3j.o:app.c:(.text.startup+0x16): undefined reference to `luaL_openlibs'
/usr/lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld: /tmp/cc09ph3j.o: bad reloc address 0x16 in section `.text.startup'
collect2: error: ld returned 1 exit status