تولید برنامه ی 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
البته اون قبلی هم هنوز کامل  build نشده luac.exe هنوز ساخته نشده  درسته ؟
بعد این که الان داری static بیلد می کنی lua هم باید static بیلد بشه
و یک چیز دیگه این دستور اخری -llua چرا نداره ؟
بله! همین طوره! پس مشکل اصلی باید از build کردن Lua برای MinGW باشه؟
آها... Lua هم به صورت static باید build بشه... این نکته رو هم خوب شد گفتید...
پس ببینم چه جوری به صورت static می شه build ـش کرد...
در مورد نذاشتن llua- هم آخه می نویسه:
/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
پس فکر کردم به جاش باید با L- و I- یه کاری بکنم!
آره باید مسیرش رو هم بدید . ارور های unefine بخاطرنشناختن فایل lib  مربوط به lua  هست
بنظر من فعلا دینامیک build کنید اگر درست شد static تست کنید
ضمنا من فکر نمی کنم مشکل از بیلد شدن luac.exe باشه چون الان
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
داره فایل dll شامل همه آبجکت ها رو میسازه  اون قسمتی که ارور میده میخواد فایل .a همین آبجکت ها رو بسازه . که اگر غیر static بخواهید به کد c لینک بهش نیازی پیدا نمیشه
مشکل از همین دستوره
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
برنامه رو به  lua52.dll  لینک کنید احتمالا درست میشه
سلام . من همیشه دوست داشتم یه چیزی مثل Vim درست کنم که انعطافش بالا باشه ولی فعلا وقتشو ندارم وگرنه همکاری میکردم باهاتون.
Lua رو خیلی دوست دارم .اگه تجربیاتت از Lua رو تو سایت اشتراک بزاری خیلی خوب میشه .
ممنون.
سلام دوستان!
احتمالا بتونم بگم حل شد!
واقعا از وقتی که جناب BluaBlade عزیز می ذارن ممنونم! شاید خودم حوصله ی خوندن یه همچین سوال طولانی ای رو نداشته باشم!
مسئله این بود که در مورد سویچ l- اطلاع نداشتم و بهش خوب توجه نکردم! وقتی می خوام برای Linux کامپایل کنم به دلیل پیدا شدن چیزی با نام مربوط llua- کار می کنه و کتابخونه ی مورد نظر پیدا می شه... اما در مورد MinGW برای ‌Windows، باید می زدم llua52- چون نام DLL اینه: lua52.dll
چه اشتباهی...! ببخشید که وقتتون رو گرفتم!
بنابراین این دستور بدون هیچ پیام ترسناکی کارش رو می کنه!:
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 -llua52
خوب حالا lua52.dll رو می ذارم کنار ‌app.exe و با wine برنامه رو اجرا می کنم... خروجی این هست:
fixme:ntdll:find_reg_tz_info Can't find matching timezone information in the registry for bias -210, std (d/m/y): 22/09/2014, dlt (d/m/y): 22/03/2014
Hello from main.lua
خط آخر خوش حال کننده است! اما نمی دونم خط اول ماجراش چیه؟!
مبارکه :) اون مربوط به timezone  
wine  هست مشکل خاصی ایجاد نمی کنه
@ Negative_Se7en
سلام دوست عزیز!
امیدوارم وقت کافی و اطلاعات کافی و مفید داشته باشم و به زبان فارسی در اختیار دوستان قرار بدم!
در مورد پروژه هم راستش یه زمانی که Windows داشتم، VB6 هم کار می کردم... حالا که با Linux کار می کنم به جاش یه چیزی هست به نام Gambas... اما مثل این که از نظر Cross-platform بودن مشکل داره... از یه طرف خیلی دوست دارم در زمینه ی ساخت زبان برنامه نویسی و این جور چیزها فعالیت کنم... بیش تر به خاطر علاقه! وگرنه هزاران زبان برنامه نویسی مختلف ساخته شده! البته هنوز هم می شه یه کار نو کرد! بنابراین ساخت یه چیزی مثل VB6 اما مدرن تر، Cross-platform، منبع باز، رایگان، Standalone و ... رو بهانه ی سرگرمی کردم! خوب فعلا ترجیح می دم برای شروع کار از Lua ـی که این قدر خوبه و این قدر زحمت کشیده شده براش و اثبات شده هم هست استفاده کنم... خوب syntax ـش با BASIC فرق داره، اگرچه شبیه هم هستند یه جورایی، اما فوق العاده قدرت مند تره از این نظر که راه رو برای توسعه و پیاده سازی ویژگی های جدید باز گذاشته... از این نظر Table ها در Lua که شهره ی خاص و عامه! با همین Table ها کلی چیز رو می شه پیاده سازی کرد! آرايه ها، کلاس ها و وراثت، ...
@ BlueBlade
ممنونم!
آره، من هم جست و جو کردم مثل این که مربوط به خود WINE می شه...
انسان بعد از هر بار compile موفق برنامه های C و ++C، اعتماد به نفسش می ره بالا! :))
آره دقیقا :)))
7 خان رستم باید رد کرد تا یک برنامه ++C کامپال بشه
اگر قرار شد IDE هم بسازی بعضی قسمت های IDE مثل syntax highliter- spell correction و auto completer  رو من می تونم بنویسم .
@ مسعود لپه‌چی :
اگه تونستی اینکارو بکن چون منم تا مدتی دیگه با Lua سروکار خواهم داشت.
در مورد پروژت به نظر من اگه بتونی رو یه زبان ساده ولی جدید کار کنی خیلی خوب میشه.
Lua واقعا انتخاب خوبیه .خیلی ساده و تمیزه .
راستی پروژت Open Source هست یا شخصیه ؟
ممنونم دوستان! واقعا عالی می شه اگه با کمک هم کارو انجام بدیم!
پروژه Open source ـه پس اگه به یه مرحله ی آبرومندانه ای! از کار رسیدم می ذارمش رو github و حتما خبرتون می کنم!
امیدوارم موفق باشی.
نمیخواد درست کنی از vi استفاده کن
ولی برای درست کردنش والا منو که به فکر انداخت که چجوری برنامه نویسیش کردن
اما قشنگ که فکر کردم دیدم به راحتی(که نه اما خیلیم سخت نیست) میشه با کتابخونه conio زبون سی این کاررو انجام داد چونکلید هارو بدون بافر میگیره
چیو با conio درست کرد ؟؟ IDE ؟؟!
ضمنا conio داخل لینوکس قابل استفاده هم نیست!
قیافه vi رو اینطوری نبین . خیلی طراحی قوی داره که اینطوری براش plugin مینویسن و اینقدر انعطافپذیره  .
به نظر من نوشتن چیزی مثل vi/vim اصلا چیز راحتی نیست ...
آره به صورت پیش فرض نیست اما بیا هدرشو بهت بدم برو توی لینوکس استفاده کن حالشو ببر
ای وای vi ، آی دی ای هست ؟؟! عجب نشنیده بودم !!! والا من جوون که بودم لینوکس کار میکردم به عنوان ادیتور ازش استفاده میکردم
البته بیشتر از piping ، cat ، grep استفاده میکردم که نخواد دستورای vi رو حفظ کنم چون همیشه یادم میرفت حالا هم فقط :ZZ یادم هست و CTRL+D
:D
منم منظورم همینه شما امدی اول می گی نمی خواد بنویسی vi هست .
متن سوال رو ببین
 "راستش هدفم این بود که یه زبان برنامه نویسی و IDE طراحی کنم!"
البته بگما خود این هدررو با ncurses نوشتن که معادل همونه اما من خودم با conio راحتترم
vi/vim ویرایشگر هستن ولی وقتی plugin ها هم بهش اضافه میشن و syntax highlighing داری وcode completion و ... دیگه نمیشه بهش گفت ویرایشگر .
من شخصا بهترین ویرایشگر/IDEی هست که تا بحال باهاش کار کردم .
پیداش نکردم اما حتما همینه که شما میگین  اشتباه خوندم
من تاحالا از پلاگین هاش استفاده نکردم برای کارهایی مثل ویرایش etc/shadow/ استفاده کردم یا نوشتن برنامه های ساده ولی از eclise استفاده میکنم خیلی قوی هست
توی سایتش بگردی پلاگین خیلی زیاد داره .

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

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

پاسخ شما

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

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