تولید برنامه ی Windows ـی Standalone با LuaJIT روی Linux - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تولید برنامه ی Windows ـی Standalone با LuaJIT روی Linux

+1 امتیاز

سلام!

در ارتباط با: مشکل بعد از تولید فایل 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
سوال شده شهریور 17, 1393  بوسیله ی مسعود لپه‌چی (امتیاز 928)   12 31 50
دوباره تگ گذاری شد شهریور 18, 1393
البته بگما خود این هدررو با ncurses نوشتن که معادل همونه اما من خودم با conio راحتترم
vi/vim ویرایشگر هستن ولی وقتی plugin ها هم بهش اضافه میشن و syntax highlighing داری وcode completion و ... دیگه نمیشه بهش گفت ویرایشگر .
من شخصا بهترین ویرایشگر/IDEی هست که تا بحال باهاش کار کردم .
پیداش نکردم اما حتما همینه که شما میگین  اشتباه خوندم
من تاحالا از پلاگین هاش استفاده نکردم برای کارهایی مثل ویرایش etc/shadow/ استفاده کردم یا نوشتن برنامه های ساده ولی از eclise استفاده میکنم خیلی قوی هست
توی سایتش بگردی پلاگین خیلی زیاد داره .

ولی خوبی vim کم حجم بودن و سبک بودن و سرعتشه .

پشت هر سیستمی هم که بشینی ( منظورم لینوکسه ) توش هست دیگه آدم فلج نمیشه :)

پاسخ شما

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

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