यूनिक्स कंसोल / मैक टर्मिनल में C / C ++ को कैसे संकलित और चलाएं?


143

मैं यूनिक्स कंसोल या मैक टर्मिनल में C या C ++ को कैसे संकलित / चला सकता हूं?

(मुझे पता है, इसे भूल जाओ, और इसे फिर से जारी करें। इसे लिखने का समय।)

जवाबों:


188

यदि यह एक सरल एकल स्रोत कार्यक्रम है:

make foo

जहाँ स्रोत फ़ाइल foo.c या foo.cpp है, आदि।

तुम भी एक makefile की जरूरत नहीं है। अपनी स्रोत फ़ाइल को एक ही नाम, माइनस एक्सटेंशन के निष्पादन योग्य बनाने के लिए पर्याप्त अंतर्निहित नियम बनाएं।

निष्पादित निष्पादन योग्य बस बनाया गया चलना किसी भी कार्यक्रम को चलाने के समान है - लेकिन आपको निष्पादन योग्य के लिए पथ को निर्दिष्ट करने की सबसे अधिक आवश्यकता होगी क्योंकि शेल केवल खोज करेगा कि $PATHनिष्पादन योग्य को खोजने के लिए क्या है , और सबसे अधिक बार जिसमें वर्तमान निर्देशिका शामिल नहीं है ( .)।

तो निर्मित निष्पादन योग्य चलाने के लिए foo:

./foo

मुझे बिल बनाने के नियमों का एहसास नहीं हुआ जब निर्दिष्ट किए गए लक्ष्यों को प्रचारित किया गया। आज कुछ नया सीखा =)
17

"-बश: मेक: कमांड नहीं मिला" <- आपके पास डेवलपर टूल और डाउनलोड किए गए अतिरिक्त घटक हैं।
dgig

17
यह नहीं है make main.cpp, लेकिन make main
क्रेग मैकमोहन

@CraigMcMahon आपके इनपुट के लिए धन्यवाद!
ह्लावुलेका मास्क

कुछ नया सीखा, यह बहुत अच्छा है!
जीवाश्म कार्लास

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

31
एक दोपहर के रूप में मुझे "/।" को शामिल नहीं करने के लिए बहुत दुःख था, जब निष्पादन
फंक-शुन

2
@ funk-shun मैं चाहता हूं कि आपकी टिप्पणी इस तरह के काम को अंजाम देने पर शीर्ष परिणाम थी - मुझे हमेशा के लिए यह पता लगाने के लिए ले लिया कि (मेरे मैक के लिए) - धन्यवाद!
कोरी डब्ल्यू।

10
मैंने "gcc main.cpp -o main.out" का उपयोग किया, और इस त्रुटि को प्राप्त करें, आर्किटेक्चर x86_64 के लिए अपरिभाषित प्रतीक: "std :: __ 1 :: लोकेल :: use_facet (std :: __ 1 :: locat :: id &) const" , ... कारण पता चला है, जीसीसी डिफ़ॉल्ट-लिंक libc है। g ++ का उपयोग करते समय libstdc ++ के साथ लिंक होगा। इसलिए "g ++ main.cpp -o main.out" का उपयोग बेहतर हो सकता है।
राहेल

1
@ राचेल मैंने भी यही समस्या अनुभव की।
Goldname

1
Undefined symbols for architecture x86_64 समस्या के बारे में , मैं कमांड को इस प्रकार संशोधित करता हूं: gcc -lstdc++ main.cpp -o main.outऔर यह मेरे मैक पर काम करता है। लिंक के माध्यम से: stackoverflow.com/questions/11852568/…
rotoava

69

यह वह कमांड है जो सभी यूनिक्स मशीनों पर काम करता है ... मैं इसे लिनक्स / उबंटू पर उपयोग करता हूं, लेकिन यह ओएस एक्स में भी काम करता है। Terminal.app में निम्न कमांड टाइप करें ।

$ g++ -o lab21 iterative.cpp

-o अक्षर O शून्य नहीं है

lab21 आपकी निष्पादन योग्य फ़ाइल होगी

iterative.cpp आपकी c ++ फ़ाइल है

आपके द्वारा प्रोग्राम चलाने के लिए टर्मिनल में निम्नलिखित कमांड टाइप करने के बाद:

$ ./lab21

1
इसी से मेरा काम बना है। मैंने बिना किस्मत के ऊपर दिए दूसरे उपाय आजमाए। धन्यवाद!
nmrichards

मेरे लिए भी काम किया है, कुछ भी स्थापित करने की कोई जरूरत नहीं है, सही समाधान।
चंदर शेखर घोरेला - गुरु

33

मेरे लिए दो कदम:

प्रथम:

make foo

फिर:

./foo

1
./foodunno कैसे स्वीकार किए गए उत्तर में कमांड का यह महत्वपूर्ण हिस्सा नहीं है
सुहैब

@ सुहैब मेरे स्वीकृत जवाब में कमांड का वह टुकड़ा नहीं था क्योंकि मूल प्रश्न इसके लिए नहीं पूछते थे। इसका शीर्षक था "यूनिक्स कंसोल / मैक टर्मिनल में C / C ++ कैसे चलाएं" - जिसे मैं "कैसे मैं c / c ++ कंपाइलर चलाता हूं" के रूप में व्याख्या करता हूं। शीर्षक को बाद में "संकलन और चलाने" में बदल दिया गया। मैंने बदले हुए प्रश्न को दर्शाने के लिए अपना उत्तर अपडेट कर दिया है।
कैम

15

यूनिक्स में सभी अनुप्रयोग निष्पादन (लिनक्स, मैक ओएस एक्स, एआईएक्स, आदि) पर्यावरण निष्पादन योग्य खोज पथ पर निर्भर करता है।

आप इस कमांड के साथ टर्मिनल में पथ प्रदर्शित कर सकते हैं:

$ PATH प्रतिध्वनि

Mac OS X पर (डिफ़ॉल्ट रूप से) यह निम्न कोलन से अलग किए गए खोज पथ को प्रदर्शित करेगा:

/ Usr / bin: / बिन: / usr / sbin: / sbin: / usr / स्थानीय / बिन: / usr / X11 / बिन

तो सूचीबद्ध निर्देशिकाओं में कोई भी निष्पादन योग्य केवल उनके नाम में लिखकर चला सकता है। उदाहरण के लिए:

cat mytextfile.txt

यह चलाता है /bin/catऔर टर्मिनल के लिए mytextfile.txt प्रदर्शित करता है।

किसी भी अन्य कमांड को चलाने के लिए जो निष्पादन योग्य खोज पथ में नहीं है, इसके लिए आवश्यक है कि आप निष्पादन योग्य के लिए पथ को योग्य करें। तो कहते हैं कि मैं मैक ओएस इलेवन पर अपने घर निर्देशिका में MyProgram नामक एक निष्पादन योग्य था, पूरी तरह से इसे इस तरह से अर्हता प्राप्त कर सकता है:

/ उपयोगकर्ताओं / ओलिवर / MyProgram

यदि आप उस स्थान पर हैं, जो उस प्रोग्राम के पास है जिसे आप निष्पादित करना चाहते हैं, तो आप एक आंशिक पथ के साथ नाम को अर्हता प्राप्त कर सकते हैं। उदाहरण के लिए, यदि मैं MyProgramनिर्देशिका में था /Users/oliver/MyProjectऔर मैं अपने घर की निर्देशिका में था , तो मैं इस तरह के निष्पादन योग्य नाम को योग्य कर सकता हूं, और इसे निष्पादित कर सकता हूं:

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.livejournal.com' से टिप्पणी जोड़ते हैं तो यह उत्तर पूर्ण है। धन्यवाद।
PA

10

रयान, मैं इसे एक टिप्पणी के बजाय एक उत्तर देने के लिए बदल रहा हूं, क्योंकि ऐसा प्रतीत होता है कि मैं बहुत संक्षिप्त था। यह सब "टर्मिनल" में करें।

G ++ कंपाइलर का उपयोग करने के लिए, आपको यह करने की आवश्यकता है:

  1. उस निर्देशिका में नेविगेट करें जिसमें आपने * .cpp फ़ाइल संग्रहीत की है।

    cd ~/programs/myprograms/
    (~ आपके घर के लिए एक शॉर्टकट है, यानी / उपयोगकर्ता / रयान / कार्यक्रम / myprograms /, आपके द्वारा उपयोग किए जाने वाले स्थान के साथ बदलें।)

  2. इसे संकलित करें

    g++ input.cpp -o output.bin (output.bin किसी भी एक्सटेंशन के साथ कुछ भी हो सकता है, वास्तव में बिन यूनिक्स पर सिर्फ आम है।)

    सफल होने पर लौटा नहीं होना चाहिए, और यह ठीक है । आमतौर पर आपको विफलताओं पर रिटर्न मिलता है।

    हालाँकि, यदि आप टाइप करते हैं, तो आप lsउसी निर्देशिका में फ़ाइलों की सूची देखेंगे। उदाहरण के लिए आप अन्य फ़ोल्डर्स, input.cpp और output.bin देखेंगे

  3. निर्देशिका के अंदर से, अब इसे निष्पादित करें ./outbut.bin


धन्यवाद यह काम किया। क्या आप किसी ऐसे ट्यूटोरियल के बारे में जानते हैं जो इन चीजों को समझाएगा? जैसे कि वास्तव में जी ++ का क्या अर्थ है, 'ओ' स्विच क्या है और कुछ और जो ऊपर आ सकता है?
रयान

makeकोई काम नहीं है क्योंकि वहाँ कोई बदलाव नहीं है के बारे में एक टिप्पणी जोड़ें ।

रयान, आप "मैन पेज" पाने के लिए टर्मिनल में "मैन जी ++" टाइप कर सकते हैं (यानी मैनुअल, जो मुझे लगता है कि Apple एम्बेडेड है)। हालांकि मैंने कोई महान ट्यूटोरियल नहीं देखा है। हालाँकि, g ++ पर मैन पेज बहुत गहराई से CFLAGS और सभी प्रकार के उन्नत संकलन विकल्पों के साथ मिल सकता है।
nerdwaller

नाइटपिक: "यदि सफल रहा तो इसमें कुछ भी नहीं [मुद्रित] होना चाहिए और यह ठीक है। आम तौर पर आपको असफलताओं पर [आउटपुट] मिलता है।" हमेशा एक वापसी मूल्य होगा, सफलता पर 0, विफलता पर गैर 0।
sepp2k

से विलय कर दिया stackoverflow.com/questions/13714436/... (इस के लिए कुछ बुनियादी निर्देश मजबूत करने की कोशिश)
Shog9

9

ऐसा करने के बारे में जाने के लिए एक कॉम्पैक्ट तरीका:

make foo && ./$_

एक-लाइनर रखना अच्छा है, ताकि आप अपने निष्पादन योग्य को फिर से आसानी से चला सकें।


8

मान लें कि वर्तमान निर्देशिका पथ में नहीं है, तो सिंटैक्स है ./[name of the program]

उदाहरण के लिए ./a.out


2
आपके लिए अच्छा हैं! डॉट और स्लेश कई प्रणालियों पर हैं, क्योंकि वर्तमान निर्देशिका ("यूनिक्स शब्दों में") शेल द्वारा खोजे गए पथ का हिस्सा नहीं है। इस प्रकार, इसे जोड़ना यह स्पष्ट करता है कि आप किस प्रोग्राम को चलाना चाहते हैं।
खोलना

7

सर्वश्रेष्ठ चेतावनी प्राप्त करने के लिए निम्नलिखित जोड़ें, आपको इसका पछतावा नहीं होगा। यदि आप कर सकते हैं, संकलन करें (चेतावनी त्रुटि है)

- Wall -pedantic -Weffc++ -Werror

वास्तव में डिफ़ॉल्ट होना चाहिए।
कोनराड रुडोल्फ

6

C या C ++ प्रोग्राम को संकलित करने के लिए, एक सामान्य कमांड है:

  1. make filename

  2. ./filename

आपके स्रोत फ़ाइल को एक ही नाम से निष्पादन योग्य फ़ाइल में बनाया जाएगा। लेकिन अगर आप मानक तरीके का उपयोग करना चाहते हैं, तो आप c ++ के लिए C प्रोग्राम और g ++ बनाने के लिए gcc कंपाइलर का उपयोग कर सकते हैं

सी के लिए:

gcc filename.c

./a.out

C ++ के लिए:

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

बस उस निर्देशिका में दर्ज करें जिसमें आपकी c / cpp फ़ाइल है।

संकलन और सी कोड चलाने के लिए।

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

संकलन और चलाने के लिए c ++ कोड।

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

"$" डिफ़ॉल्ट मैक टर्मिनल प्रतीक है


2

मैक टर्मिनल से एक cpp स्रोत कोड को संकलित करने और चलाने के लिए निम्नलिखित को करने की आवश्यकता है:

  1. यदि cpp फ़ाइल का पथ somePath / fileName.cpp है, तो पहले पथ somePath के साथ निर्देशिका पर जाएँ
  2. FileName.cpp को संकलित करने के लिए, c ++ fileName.cpp -o fileName टाइप करें
  3. प्रोग्राम को चलाने के लिए, टाइप करें ।/fileName

0

टर्मिनल का उपयोग करके एक .C फ़ाइल चलाना एक दो-चरणीय प्रक्रिया है। पहला कदम टर्मिनल में gcc टाइप करना है और .C फ़ाइल को टर्मिनल पर छोड़ना है, और फिर दबाएँ Enter:

username$ gcc /Desktop/test.c 

दूसरे चरण में, निम्न कमांड चलाएँ:

username$ ~/a.out

0

कमांड के नीचे c ++ फाइल्स चलाने के लिए, फाइल का नाम "main.cpp" है।

1. सी फ़ाइल से ऑब्जेक्ट फ़ाइल बनाने के लिएComile।

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

2.Since #include <conio.h>MacOS में समर्थन नहीं करता है इसलिए हमें इसके विकल्प का उपयोग करना चाहिए जो Mac में समर्थन करता है #include <curses.h>। अब ऑब्जेक्ट फ़ाइल को निष्पादन योग्य फ़ाइल में बदलने की आवश्यकता है। उपयोग करने के लिए curses.hहमें पुस्तकालय का उपयोग करना होगा -lcurses

g++ -o main main.o -lcurses

3.अब निष्पादन योग्य चलाएँ।

./main
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.