কীভাবে একটি ইউনিক্স কনসোল / ম্যাক টার্মিনালে সি / সি ++ কম্পাইল করে চালানো যায়?


143

আমি কীভাবে ইউনিক্স কনসোল বা ম্যাক টার্মিনালে সি বা সি ++ কম্পাইল / চালাতে পারি?

(আমি এটি জানি, এটি ভুলে গেছি এবং এটিকে পুনরায় জানাতে চাই it এটি লেখার সময়))

উত্তর:


188

যদি এটি একটি সাধারণ একক উত্স প্রোগ্রাম:

make foo

যেখানে উত্স ফাইলটি foo.c বা foo.cpp ইত্যাদি is

আপনি এমনকি একটি makefile প্রয়োজন না। আপনার উত্স ফাইলটি একই নাম, বিয়োগ এক্সটেনশনের একটি এক্সিকিউটেবলের মধ্যে তৈরি করতে মেকের যথেষ্ট বিল্ট-ইন বিধি রয়েছে।

সবে নির্মিত নির্মিত এক্সিকিউটেবল চালানো যে কোনও প্রোগ্রাম চালানোর সমান - তবে আপনাকে প্রায়শই নির্বাহকের জন্য পথ নির্ধারণ করতে হবে কারণ শেলটি কেবল এক্সিকিউটেবলগুলি অনুসন্ধান করার জন্য যা অনুসন্ধান করে $PATHএবং প্রায়শই এটি বর্তমান ডিরেক্টরি অন্তর্ভুক্ত করে না ( .)।

সুতরাং বিল্ট এক্সিকিউটেবল চালানোর জন্য foo:

./foo

মেকিং করার সময় নির্দিষ্ট লক্ষ্যগুলিতে প্রচারিত বিল্টিন বিধিগুলি বুঝতে পারি নি। আজ নতুন কিছু শিখেছে =)
ব্রানান

"-বাশ: মেক: কমান্ড পাওয়া যায় নি" <- আপনার বিকাশকারী সরঞ্জাম এবং অতিরিক্ত উপাদান ডাউনলোড করতে হবে।
ডিজিগ

17
এটা না make main.cpp, কিন্তু make main
ক্রেগ ম্যাকমাহন

@ ক্রেইগম্যাকমাহন আপনার ইনপুটটির জন্য ধন্যবাদ!
হালাউলেকা এমএএস

নতুন কিছু শিখেছি, এটি দুর্দান্ত!
জীবাশ্মযুক্ত কার্লোস

112
gcc main.cpp -o main.out  
./main.out

31
নুবু হিসাবে আমি "./" অন্তর্ভুক্ত না করার জন্য এতটা দুঃখ পেয়েছিলাম
ফান-শান

2
@ ফানক-শান আমি এই ধরণের জিনিস গুগল করার সময় আপনার মন্তব্যটি শীর্ষ ফলাফল হতে পারে - আমাকে এটি চিরকাল ধরে নিয়ে গেল (আমার ম্যাকের জন্য) - ধন্যবাদ!
Cory ডব্লিউ।

10
আমি "জিসিসি মেইন.সি.পি.পি.-মেইন.আউট" ব্যবহার করেছি এবং এই ত্রুটিটি পেয়েছি, আর্কিটেকচারের জন্য অপরিবর্তিত প্রতীকগুলি x86_64: "স্টাড :: __ 1 :: লোকেল :: ইউজ_ফেসেট (স্ট্যান্ড: ___ 1 :: লোকেল :: আইডি ও) কনস্ট" , ... কারণটি সন্ধান করে, জিসিসি ডিফল্ট-লিঙ্কগুলি লাইবসি। g ++ ব্যবহার করার সময় libstdc ++ এর সাথে লিঙ্ক হবে। সুতরাং "g ++ main.cpp -o main.out" ব্যবহার আরও ভাল হতে পারে।
রাহেল

1
@ রাচেল আমিও একই সমস্যাটি অনুভব করেছি।
স্বর্ণের নাম

1
Undefined symbols for architecture x86_64 ইস্যু সম্পর্কে , আমি কমান্ডটি নিম্নরূপে সংশোধন করেছি: gcc -lstdc++ main.cpp -o main.outএবং এটি আমার ম্যাকটিতে কাজ করে। : লিঙ্কের মাধ্যমে stackoverflow.com/questions/11852568/...
rotoava

69

এটি হ'ল কমান্ড যা সমস্ত ইউনিক্স মেশিনে কাজ করে ... আমি এটি লিনাক্স / উবুন্টুতে ব্যবহার করি তবে এটি ওএস এক্সেও কাজ করে। টার্মিনাল.্যাপে নিম্নলিখিত কমান্ডটি টাইপ করুন ।

$ g++ -o lab21 iterative.cpp

-o চিঠি হে শূন্য নয়?

lab21 আপনার এক্সিকিউটেবল ফাইল হবে

iterative.cpp আপনার সি ++ ফাইল

আপনি এই কমান্ডটি চালনার পরে আপনার প্রোগ্রামটি চালানোর জন্য টার্মিনালে নিম্নলিখিত টাইপ করুন:

$ ./lab21

1
এটিই আমার পক্ষে কাজ করেছিল। আমি ভাগ্য ছাড়াই উপরের অন্যান্য সমাধানগুলি চেষ্টা করেছিলাম। ধন্যবাদ!
nmrichards

আমার জন্য পাশাপাশি কাজ করেছে, কিছু ইনস্টল করার দরকার নেই, নিখুঁত সমাধান।
চন্দর শখের ঘোড়েলা - গুরু

33

আমার জন্য দুটি পদক্ষেপ:

প্রথম:

make foo

তারপর:

./foo

1
./fooকীভাবে গৃহীত উত্তরগুলির এই গুরুত্বপূর্ণ কমান্ডের টুকরো নেই
সুহাইব

@ সুহাইব আমার গৃহীত উত্তরের সেই আদেশের অংশটি ছিল না কারণ আসল প্রশ্নটি এটি জিজ্ঞাসা করেনি। এর শিরোনাম ছিল "ইউনিক্স কনসোল / ম্যাক টার্মিনালে সি / সি ++ কীভাবে চালানো যায়" - যা আমি "আমি কীভাবে সি / সি ++ কম্পাইলার চালনা করব" হিসাবে ব্যাখ্যা করি। পরবর্তীকালে শিরোনামটি "সংকলন ও রান" এ পরিবর্তিত হয়েছিল। পরিবর্তিত প্রশ্নের প্রতিফলনের জন্য আমি আমার উত্তর আপডেট করেছি।
ক্যামহ

15

একটি ইউনিক্সের সমস্ত অ্যাপ্লিকেশন সম্পাদন (লিনাক্স, ম্যাক ওএস এক্স, এআইএক্স, ইত্যাদি) পরিবেশনের নির্বাহযোগ্য অনুসন্ধানের পথের উপর নির্ভর করে।

আপনি এই কমান্ডটি দিয়ে টার্মিনালে এই পথটি প্রদর্শন করতে পারেন:

প্রতিধ্বনি $ পথ

ম্যাক ওএস এক্সে (ডিফল্টরূপে) এটি নিম্নলিখিত কোলন দ্বারা পৃথক করা অনুসন্ধানের পথটি প্রদর্শন করবে:

, / Usr / বিন: / বিন: / usr / sbin: পক্ষ থেকে / sbin / usr / স্থানীয় / বিন / usr / ব্যবহারে X11 / বিন

সুতরাং তালিকাবদ্ধ ডিরেক্টরিতে যে কোনও এক্সিকিউটেবল কেবল তাদের নামে টাইপ করে চালানো যায়। উদাহরণ স্বরূপ:

বিড়াল mytextfile.txt

এই রান /bin/cat টার্মিনালে mytextfile.txt এবং প্রদর্শন করে।

এক্সিকিউটেবল অনুসন্ধানের পথে নেই এমন অন্য কোনও কমান্ড চালনা করার জন্য আপনার মৃত্যুদন্ড কার্যকর করার পথটিকে যোগ্য করে তোলা দরকার। সুতরাং বলুন যে আমার কাছে ম্যাক ওএস ইলেভেনের হোম ডিরেক্টরিতে মাইপ্রোগ্রাম নামে একটি এক্সিকিউটেবল ছিল এটি পুরোপুরি এর মতো যোগ্যতা অর্জন করতে পারে:

/ ব্যবহারকারীরা / অলিভার / MyProgram

আপনি যদি এমন কোনও স্থানে থাকেন যা আপনি প্রোগ্রামটির নিকটবর্তী হন যা আপনি কার্যকর করতে চেয়েছিলেন তবে আপনি নামটিকে একটি আংশিক পথ দিয়ে যোগ্য করতে পারেন। উদাহরণস্বরূপ, যদি MyProgramডিরেক্টরির মধ্যে ছিল /Users/oliver/MyProjectআমি ও আমি আমার home ডিরেক্টরির ছিল আমি ভালো এক্সিকিউটেবল নাম যোগ্যতা অর্জন পারেন, এবং এটি চালানো আছে:

MyProject / MyProgram

অথবা বলুন যে আমি ডিরেক্টরিতে /Users/oliver/MyProject2ছিলাম এবং আমি নির্বাহ /Users/oliver/MyProject/MyProgramকরতে চেয়েছিলাম যে আমি এটির মতো একটি প্রাসঙ্গিক পথ ব্যবহার করতে পারি:

../MyProject/MyProgram

একইভাবে যদি আমি একই ডিরেক্টরিতে থাকি তবে আমাকে MyProgram"বর্তমান ডিরেক্টরি" আপেক্ষিক পথ ব্যবহার করতে হবে। আপনার বর্তমান ডিরেক্টরিটি হ'ল পিরিয়ড অক্ষর এবং তারপরে একটি স্ল্যাশ। উদাহরণ স্বরূপ:

./MyProgram

আপনি বর্তমানে কোন ডিরেক্টরিটি ব্যবহার করছেন তা নির্ধারণ করতে pwd কমান্ডটি ।

আপনি যদি নিজের হার্ড ডিস্কে এমন কোনও স্থানে প্রোগ্রামগুলি রাখছেন যা আপনি নামগুলির যোগ্যতা ছাড়াই চালনা করতে চান। উদাহরণস্বরূপ, অন্যান্য প্রোগ্রামের নিয়মিত ব্যবহৃত শেল স্ক্রিপ্টগুলির জন্য যদি আপনার বাড়ির ডিরেক্টরিতে একটি "বিন" ডিরেক্টরি থাকে তবে এটি কার্যকর করার যোগ্য অনুসন্ধানের পথটি পরিবর্তন করা বুদ্ধিমানের কাজ হতে পারে।

এটি .bash_profileআপনার হোম ডিরেক্টরিতে বিদ্যমান ফাইলটি তৈরি বা সম্পাদনা করে এবং লাইনগুলি যুক্ত করে সহজেই করা যায় :

#!/bin/sh
export PATH=$PATH:~/bin

এখানে টিলড (~) অক্ষরটি / ব্যবহারকারী / অলিভারের শর্টকাট হিসাবে ব্যবহৃত হচ্ছে। এছাড়াও নোট করুন যে হ্যাশ ব্যাং (#!) লাইনটি ফাইলের প্রথম লাইন হওয়া দরকার (যদি এটি ইতিমধ্যে বিদ্যমান না থাকে)। আরও লক্ষ করুন যে এই কৌশলটির জন্য আপনার লগইন শেলটি বাশ করা উচিত (ম্যাক ওএস এক্স এবং বেশিরভাগ লিনাক্স বিতরণে ডিফল্ট)। এছাড়াও নোট করুন যে আপনি যদি চান যে আপনার প্রোগ্রামগুলি ~/binইনস্টিটিউট সিস্টেমের এক্সিকিউটেবলের অগ্রাধিকার হিসাবে ব্যবহৃত হয় তবে আপনার রফতানি বিবৃতিটিকে নিম্নরূপে পুনঃক্রম করতে হবে:

export PATH=~/bin:$PATH

আপনি যদি সুরক্ষা সম্পর্কে আমার নিজের উত্তরে 'onebyone.livej Journal.com' থেকে মন্তব্যগুলি যুক্ত করেন তবে এই উত্তরটি সম্পূর্ণ। ধন্যবাদ.
পিএ

10

রায়ান, আমি এটি একটি মন্তব্যের পরিবর্তে একটি উত্তর হিসাবে পরিবর্তন করছি, যেহেতু এটি প্রদর্শিত হয় আমি খুব সংক্ষিপ্ত ছিল। "টার্মিনাল" এ সমস্ত কিছু করুন।

জি ++ সংকলকটি ব্যবহার করতে, আপনাকে এটি করতে হবে:

  1. যে ডিরেক্টরিতে আপনি * .cpp ফাইলটি সঞ্চিত করেছেন সেটিতে নেভিগেট করুন।

    cd ~/programs/myprograms/
    (~ হ'ল আপনার বাড়ির শর্টকাট, যেমন / ব্যবহারকারী / রায়ান / প্রোগ্রাম / মাইপ্রোগ্রাম /, আপনি যে অবস্থানটি ব্যবহার করেছেন তা বাস্তবে প্রতিস্থাপন করুন))

  2. এটি সংকলন

    g++ input.cpp -o output.bin (আউটপুট.বিন যে কোনও এক্সটেনশনের সাথে কিছু হতে পারে, সত্যই। বিন ইউনিক্সে কেবল সাধারণ)

    এটি সফল হলে কিছুই ফেরত আসা উচিত, এবং এটি ঠিক আছে । সাধারণত আপনি ব্যর্থতা উপর রিটার্ন পেতে।

    তবে আপনি যদি টাইপ করেন তবে আপনি lsএকই ডিরেক্টরিতে থাকা ফাইলগুলির তালিকা দেখতে পাবেন। উদাহরণস্বরূপ আপনি অন্যান্য ফোল্ডারগুলি, ইনপুট সিপি এবং আউটপুট.বিন দেখতে পাবেন

  3. ডিরেক্টরি ভিতরে, এখন এটি দিয়ে চালানো ./outbut.bin


ধন্যবাদ এটি কাজ করেছে। আপনি কি এমন কোনও টিউটোরিয়াল জানবেন যা এই বিষয়গুলি ব্যাখ্যা করবে? ঠিক জি ++ এর অর্থ কী, 'ও' স্যুইচ কি এবং অন্য যে কোনও কিছু আসতে পারে?
রায়ান

makeকোনও মেকফাইল নেই বলে অভ্যাস কাজ সম্পর্কে একটি মন্তব্য যুক্ত করুন ।

রায়ান, আপনি "ম্যান পেজ" পেতে টার্মিনালে "ম্যান জি ++" টাইপ করতে পারেন (যেমন ম্যানুয়ালগুলি, যা আমি অনুমান করব যে অ্যাপল এমবেড করেছে)। যদিও আমি কোনও দুর্দান্ত টিউটোরিয়াল দেখিনি। যদিও, জি ++ এ থাকা ম্যান পেজটি সিএফএলএজিএস এবং সমস্ত প্রকারের উন্নত সংকলনের বিকল্পগুলির সাথে গভীরভাবে পেতে পারে।
নার্ডওয়ালার

নিতপিক: "এটি সফল হলে কিছু নয় [মুদ্রিত] হওয়া উচিত এবং এটি ঠিক আছে General সাধারণভাবে আপনি ব্যর্থতায় [আউটপুট] পান get" সর্বদা একটি সাফল্যের মান 0, ব্যর্থতার ক্ষেত্রে অ 0-থাকবে।
sepp2k

থেকে মার্জ করা হয়েছে stackoverflow.com/questions/13714436/... (এই জন্য কিছু মৌলিক নির্দেশাবলী একত্রীকরণ বের করার চেষ্টা)
Shog9

9

এটি করার জন্য একটি সংক্ষিপ্ত উপায় হতে পারে:

make foo && ./$_

ওয়ান-লাইনার পেয়ে ভাল লাগল যাতে আপনি সহজেই নিজের এক্সিকিউটেবলটি আবার সহজে চালাতে পারেন।


8

বর্তমান ডিরেক্টরিটি ধরে নিচ্ছি যে পথে নেই, সিনট্যাক্সটি রয়েছে ./[name of the program]

উদাহরণ স্বরূপ ./a.out


2
তোমার জন্য ভালো! ডট এবং স্ল্যাশ রয়েছে কারণ অনেক সিস্টেমে বর্তমান ডিরেক্টরি ("।" ইউনিক্সের পদে) শেল দ্বারা অনুসন্ধান করা পথের অংশ নয়। সুতরাং, এটি যুক্ত করা এটি স্পষ্ট করে তোলে আপনি কোন প্রোগ্রামটি চালাতে চান।
বিনোদন

7

সেরা সতর্কতা পেতে নিম্নলিখিত যুক্ত করুন, আপনি এটির জন্য আফসোস করবেন না। আপনি যদি পারেন তবে WISE সংকলন করুন (সতর্কতাটি ত্রুটিযুক্ত)

- Wall -pedantic -Weffc++ -Werror

সত্যই ডিফল্ট হওয়া উচিত।
কনরাড রুডলফ

6

সি বা সি ++ প্রোগ্রামগুলি সংকলনের জন্য একটি সাধারণ কমান্ড রয়েছে:

  1. make filename

  2. ./filename

মেক আপনার উত্স ফাইলটিকে একই নামে এক্সিকিউটেবল ফাইলে তৈরি করবে। তবে আপনি যদি স্ট্যান্ডার্ড পদ্ধতিটি ব্যবহার করতে চান, আপনি সি প্রোগ্রামের জন্য জিসিসি সংকলক এবং সি ++ এর জন্য জি ++ ব্যবহার করতে পারেন

সি এর জন্য:

gcc filename.c

./a.out

সি ++ এর জন্য:

g++ filename.cpp

./a.out

2

ব্যবহার ক makefile। এমনকি খুব ছোট (= এক-ফাইল) প্রকল্পের জন্যও চেষ্টাটি সম্ভবত এটির পক্ষে উপযুক্ত কারণ আপনার কাছে পরীক্ষাগুলি সেটিংসের কয়েকটি সেট জিনিস পরীক্ষা করতে পারে। ডিবাগিং এবং স্থাপনা এই পদ্ধতিতে আরও সহজ কাজ করে।

makeম্যানুয়ালটি পড়ুন , এটি প্রথম নজরে বেশ দীর্ঘ বলে মনে হচ্ছে তবে বেশিরভাগ অংশে আপনি কেবল স্কিম করতে পারেন। সব মিলিয়ে এটি আমাকে কয়েক ঘন্টা সময় নিয়েছে এবং আমাকে আরও বেশি উত্পাদনশীল করে তুলেছে।


ধন্যবাদ, এটিও একটি ভাল উত্তর। আমি যতটা পারি ততটুকু মেক ব্যবহার করার চেষ্টা করি এবং এটি "সহজ" উপায়টির বাক্য গঠন ভুলে যাওয়ারও একটি কারণ।
পিএ

2

আমি এই লিঙ্কটি দিকনির্দেশ সহ পেয়েছি:

http://www.wesg.ca/2007/11/how-to-write-and-compile-c-programs-on-mac-os-x/

মূলত আপনি:

gcc hello.c
./a.out (or with the output file of the first command)

2
কোন সুযোগ আপনি বোঝাতে চান gcc hello.c -o a.out? যা একই কাজ করে gcc hello.c
বিটমাস্ক

2

আপনার সি / সিপিপি ফাইলটি কেবল সেই ডিরেক্টরিতে প্রবেশ করুন।

সি কোড সংকলন এবং চলমান জন্য।

$gcc filename.c
$./a.out filename.c

সি ++ কোড সংকলন এবং চলমান জন্য।

$g++ filename.cpp
$./a.out filename.cpp

"$" হ'ল ডিফল্ট ম্যাক টার্মিনাল প্রতীক


2

ম্যাক টার্মিনাল থেকে সিপিপি উত্স কোডটি সংকলন এবং চালনার জন্য নিম্নলিখিতটি করা দরকার:

  1. সিপিসি ফাইলের পাথ যদি কিছু প্যাথ / ফাইলনাম কোডপিপি হয় তবে প্রথমে কিছুপথের সাথে ডিরেক্টরিতে যান
  2. FileName.cpp সংকলন করতে c ++ fileName.cpp -o fileName টাইপ করুন
  3. প্রোগ্রামটি চালাতে, ./fileName টাইপ করুন

0

টার্মিনালটি ব্যবহার করে একটি। সি ফাইল চালানো একটি দ্বি-পদক্ষেপ প্রক্রিয়া। প্রথম পদক্ষেপটি টার্মিনালে জিসিসি টাইপ করা এবং টার্মিনালে .C ফাইলটি ফেলে দেওয়া এবং তারপরে টিপুন Enter:

username$ gcc /Desktop/test.c 

দ্বিতীয় ধাপে, নিম্নলিখিত কমান্ডটি চালান:

username$ ~/a.out

0

কমান্ডের নীচে চলমান সি ++ ফাইল চালানোর জন্য, ধরে নেওয়া ফাইলের নাম "main.cpp"

1. সি ++ ফাইল থেকে অবজেক্ট ফাইল করতে কম্পাইল।

g++ -c main.cpp -o main.o

২.মিনস ম্যাকসগুলিতে #include <conio.h>সমর্থন করে না তাই আমাদের ম্যাকে এটির বিকল্পটি ব্যবহার করা উচিত যা সমর্থন করে #include <curses.h>। এখন অবজেক্ট ফাইলকে এক্সিকিউটেবল ফাইলে রূপান্তর করা দরকার। ব্যবহার করার জন্য curses.hআমাদের গ্রন্থাগার ব্যবহার করতে হবে -lcurses

g++ -o main main.o -lcurses

3.এখন এক্সিকিউটেবল চালান।

./main
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.