تالار گفتمان مانشت

نسخه‌ی کامل: اجرای برنامه در لینوکس ( لطفا سریعتر راهنمایی کنید)
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان من یه برنامه مولتی ترد نوشتم ولی نمیدونم که چه طوری باید تویه لینوکس به همراه بقیه ی فایل های cpp که بقیه برنامه هام توش هست اجرا کنم
هر کدوم رو جدا جدا بلدم ولی با هم بلد نیستم
مثلا یه برنامه ترد رو اینطوری نوشتم و کامپایل کردم
g++ -lpthred hello.cpp
و یا چندتا برنامه رو اینطوری اجرا کردم
g++ hello.cpp main.cpp googby.cpp
ولی این دوتا با هم چه طوری باید بنویسم؟
++g فقط برنامه شما را کمپایل می کند ولی آنرا اجرا نمی کند
اگر نامی برای برنامه خروجی مشخص نکنید (کاری که شما انجام داده اید) جی سی سی از نام پیشفرض a استفاده می کند
برای اجرا برنامه کمپایل شده از مسیر جاری تایپ کنید

کد:
./a
///////////////////////////////
از سوییچ o- می توانید برای مشخص کردن نام برنامه خروجی استفاده کنید

مثلا:
کد:
g++ hello.cpp -o filename

حال برای اجرا:
کد:
./filename
به این یه نیگاه بنداز :

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.

برنامه هارو تو emac نوشتی ؟؟
پارامتر Wall رو چرا تو جلوی دستور برای پیوند فایلا و پارامتر o- رو برای تولید فایل خروجی یکتا یادت نره
البته راه دیگه ای هم هست برای پیوند فایل ها اونم به صورت ایجاد External هستش، همین رو بتونی راحت تره
با vim تویه لینوکس نوشتم و تو بش با اون g++ کامپایل میکنم و اون فایله اوت رو هم بلدم اجرا کنم
دوستان میدونم که o- چی کار میکنه مشکل من اینه که نمیدونم چطوری اون برنامه ترد و اون cpp هارو با هم پیوند بزنم یعنی وقتی مینوسیم
g++ -lpthread main.cpp hello.cpp goodby.cpp
میگه
hello.cpp و goodby.cpp
no such a file or a directory
دقیقا پیام خروجی را اینجا بنویس
c- بدون لینک کردن برنامه فایلها را مستقل به ابجکت تبدیل می کند و سپس می توانی همه را با هم لینک کنید.
////////////////////////////
یک راه ساده به شرط دردسترس بودن تمام لایبرری های مورد نیاز و فقط یک تابع main در برنامه های مسیر جاری:

این دستورات را امتحان کن:
کد:
g++ -c *.cpp
g++ *.o
./a
البته به جای * می توانی یکی یکی اسم فایلها را هم نام ببری
اینا رو بلدم
من این رو میزنم
g++ -lpthread main_server.cpp ClientSocket.cpp main_client.cpp ServerSocket.cpp Socket.cpp
ولی توی خروجی به جایه یه فایله اوت ارور میده میگه
ClientSocket.cpp: no such file or directory
ServerSocket.cpp: no such file or directory:
Socket.cpp: no such file or directory
ببینید اگر می خواید همه ی این پروسس ها یه جا برن تو بک گراند باید یه & بین این ها بگذارید
اینو امتحان کنید نتیجه رو بگین ببینیم جواب گرفتین یا نه

کد:
g++ -lpthread main_server.cpp & g++ -lpthread ClientSocket.cpp & g++ -lpthread main_client.cpp & g++ -lpthread ServerSocket.cpp & g++ -lpthread Socket.cpp

البته این فقط یه حدسه بعد از زدن این دستور، یه jobs بگیرین ببینین الآن آیا اینا run هستن یا خیر
البته چند تا نکته مبهمه برام :
تو bash ما عملا مکانیزم thread نداریم ( با شک و تردید میگما مطمئن نیستم )
عوضش jobs ها رو داریم، یعنی همه پروسس هستند که می تونن توی پس زمینه run بشن
پس ما نمی تونیم تو bash ، یه برنامه multithread داشته باشیم و عملا ما باید parallel processing انجام بدیم
اگر بخوایم parallel processing انجام بدیم یه روشی داره این شکلی :

کد:
cat listofthings.txt | parallel --max-procs=5 --group 'echo "Thing: {}"'
تک تک این کامند ها رو جدا جدا هر کدوم توی یه خط بریزین توی یه فایل متنی بدین به خورد این کامنده ببینیم چی میشه نتیجه ش
فرض کنید قراره هر کدوم از این فایل ها رو جدا جدا اجرا کنید، اونجوری تو هر خط فایل متنی بنویسید دستورات رو
این را تست کن

g++ -I . -lpthread main_server.cpp ClientSocket.cpp main_client.cpp ServerSocket.cpp Socket.cpp

مفهوم
no such file or directory
این هست که چنین فایلی در دسترس نیست. (در مسیر جاری یا مسیر لایبری های تعریف شده)
محل این فایلها را پیدا کن با I- به کمپایلر مسیر فایلها را به کمپایلر اعلام کن.
تو مسیر جایی که فایل هات قرار داره برو و دستور زیر رو بنویس
g++ -lpthread main.cpp hello.cpp goodby.cpp -o 1
سلام دوستان ببخشید که دیر اومدم
مشکل رفع شد نمیدونم چرا اون ارور رو میداد ولی با make file اوکی شد اینم کده میک فایلش
کد:
# Makefile for the socket programming example
#

simple_server_objects = ServerSocket.o Socket.o  -lpthread main_server.o
simple_client_objects = ClientSocket.o Socket.o  -lpthread  main_client.o


all : simple_server simple_client

simple_server: $(simple_server_objects)
    g++ -o simple_server $(simple_server_objects)


simple_client: $(simple_client_objects)
    g++ -o simple_client $(simple_client_objects)


Socket: Socket.cpp
ServerSocket: ServerSocket.cpp
ClientSocket: ClientSocket.cpp
simple_server_main: simple_server_main.cpp
simple_client_main: simple_client_main.cpp


clean:
    rm -f *.o simple_server simple_client
لینک مرجع