2009-11-11 13 views
35

मैंने अभी अपने उबंटू पर पाया है, दो अलग-अलग सी ++ कंपाइलर हैं:/usr/bin/g ++ और/usr/bin/C++। मैं उत्तरार्द्ध से परिचित नहीं हूं, लेकिन आदमी सी ++ बस जीसीसी के मैनपेज पर कूदता है। मुझे आश्चर्य है कि सी ++ कंपाइलर्स के रूप में उनका क्या अंतर है?"जी ++" और "सी ++" कंपाइलर

धन्यवाद और सम्मान!

$ readlink /usr/bin/c++ 
/etc/alternatives/c++ 
$ readlink /etc/alternatives/c++ 
/usr/bin/g++ 

तो c++g++ करने के लिए सिर्फ एक कड़ी है:

+4

'सीसी' और 'सी ++' पॉज़िक्स कंपाइलर्स के नाम हैं। अधिक संभावना नहीं है, 'सी ++' 'g ++', और 'cc' से' gcc' के लिए एक सिम्लिंक होगा। –

+0

संभावित डुप्लिकेट [जी ++ और जीसीसी के बीच क्या अंतर है?] (Https://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc) फेडोरा 21 पर –

उत्तर

42

यह सामान्य उबंटू सिम्लिंक तबाही है।

यदि आप ls -l /usr/bin/c++, तो आप देखेंगे कि यह वास्तव में एक प्रतीकात्मक लिंक है। करने के लिए:

/usr/bin/g++ 

तो, Ubuntu सिस्टम पर, C++ जी ++ है:

/etc/alternatives/c++ 

कौन सा बारी में, भी करने के लिए एक प्रतीकात्मक कड़ी है। लिंक संकेत के पीछे तर्क यह है कि कई पैकेज हैं जो एक सी ++ कंपाइलर (जैसे जी ++ के विभिन्न संस्करण) प्रदान कर सकते हैं। आप उबंटू पर यह बहुत कुछ देखेंगे। उदाहरण के लिए, qmake/etc/विकल्पों में फ़ाइल का एक लिंक है, जो (मेरे सिस्टम पर)/usr/bin/qmake-qt3 पर एक लिंक है।

+1

,/usr/bin/C++ और/usr/bin/g ++ दोनों बाइनरी फाइलें हैं (यानी सिम्लिंक नहीं) ... लेकिन दोनों फाइलें समान हैं (बाइट्स और समान md5sum की समान संख्या)। (एक सिम्लिंक अधिक उपयुक्त लगता है ...यकीन नहीं है कि उन्होंने एक ही फाइल की एक प्रति क्यों की है। जी ++ और सी ++ दोनों एक ही आरपीएम 'जीसीसी-सी ++' द्वारा प्रदान किए जाते हैं।) –

11

मेरी मशीन पर, c++ एक कड़ी है।

3

g ++ gnu C++ कंपाइलर है जहां C++ सिस्टम C++ कंपाइलर है, उबंटू सी ++ के मामले में g ++ का लिंक है, हालांकि किसी अन्य सिस्टम में यह एक गैर जीसीसी कंपाइलर के लिए बहुत अच्छा लिंक हो सकता है। जैसा कि किसी और ने कहा वी बनाम vim। सिर्फ इसलिए कि प्रणाली पर vi का एक लिंक मौजूद नहीं है इसका मतलब यह नहीं है कि यह किसी भी vi क्लोन हो सकता है।

23

c++ एक सिस्टम पर C++ कंपाइलर का मानक नाम है।

एक जीएनयू प्रणाली आप लगभग निश्चित रूप से GCC (जीएनयू संकलक संग्रह) है स्थापित है, जो एक C++ संकलक (जीएनयू के लिए 'जी') g++ नामित शामिल पर। लेकिन POSIX- संगत होने के लिए, वे इस कंपाइलर को c++ के रूप में भी स्थापित करते हैं, कभी-कभी c++g++ का एक प्रतीकात्मक लिंक होता है कभी-कभी यह एक कठिन लिंक होता है, कभी-कभी यह एक ही फ़ाइल को दो बार इंस्टॉल किया जाता है।

यह फ्रीबीएसडी या नेटबीएसडी जैसी अन्य प्रणालियों के मामले में नहीं हो सकता है। यह संभव है कि उन प्रणालियों में जीसीसी (और अन्य जीएनयू सामान) स्थापित न हों।

अपने सिस्टम पर इन दो फ़ाइलों सिर्फ समान हैं:

% diff `which c++` `which g++` 
% echo $? 
0 

इसका मतलब है कि c++ कम से कम एक ही संकलक का आह्वान, लेकिन सैद्धांतिक रूप से यह कुछ कमांड लाइन विकल्प अलग तरह से व्याख्या या कुछ अलग चूक हो सकता है। अधिक जानकारी वाला कोई व्यक्ति इस संबंध में उत्तर का विस्तार करने के लिए स्वतंत्र है।

+1

धन्यवाद मैं C++ और g ++ के md5sum की जांच करता हूं और वे वही हैं! लेकिन यहां 2 फाइलें क्या हैं जो एक ही नौकरी बनाती हैं? – Arseniy

+0

हाँ, इसमें कोई फर्क नहीं पड़ता है, और आप जो भी चाहें उसका उपयोग कर सकते हैं। यदि आप अपने निर्माण में जीसीसी विशिष्ट विकल्पों का उपयोग करते हैं तो मैं 'g ++' की अनुशंसा करता हूं, बस इतना स्पष्ट है, लेकिन आपको हमेशा उपयोगकर्ता को 'CXX' चर के साथ कंपाइलर को ओवरराइड करना चाहिए। – ams

+2

भले ही फाइलें समान हों, इसका मतलब यह नहीं है कि वे बराबर हैं। एक प्रोग्राम इसे कॉल करने के लिए किस नाम का उपयोग किया गया था, इसके आधार पर अलग-अलग व्यवहार कर सकता है (उदाहरण के लिए 'गनज़िप' और 'जेकैट'' gzip' से लिंक हैं, और विभिन्न डिफ़ॉल्ट तर्कों का उपयोग तब किया जाता है जब 'gzip' को अन्य दो नामों के साथ बुलाया जाता है)। – Claudio

संबंधित मुद्दे