Linux c++ कमांड गाइड: g++ से अंतर और कोड कंपाइलेशन

संक्षिप्त विवरण

लिनक्स टर्मिनल वातावरण में उपलब्ध c++ कमांड की आंतरिक कार्यप्रणाली और सिस्टम आर्किटेक्चर में इसके स्थान को समझना हर डेवलपर के लिए आवश्यक है। यह ट्यूटोरियल g++ के साथ इसके तकनीकी संबंधों को स्पष्ट करता है और व्यावहारिक उदाहरणों के माध्यम से सोर्स कोड को सफलतापूर्वक कंपाइल तथा निष्पादित करने की पूरी प्रक्रिया समझाता है।

C++ डेवलपमेंट एनवायरनमेंट सेटअप और कंपाइलर वर्जन की जांच

Ubuntu पर C++ प्रोग्राम्स के निर्माण के लिए जरूरी कंपाइलर, हेडर फाइल्स और लिंकिंग टूल्स इंस्टॉल करने हेतु apt-get update -qq && apt-get install -y build-essential कमांड रन करें।

apt-get update -qq && apt-get install -y build-essential

सिस्टम फाइल पाथ में c++ कंपाइलर की बाइनरी लोकेशन का पता लगाने के लिए which c++ कमांड का प्रयोग किया जाता है।

which c++

वर्तमान सिस्टम में मौजूद C++ कंपाइलर का सटीक रिलीज वर्जन और बिल्ड कॉन्फ़िगरेशन देखने के लिए c++ --version निष्पादित करें।
⚙️ [महत्वपूर्ण कंपाइलर फ्लैग्स]

-o <file> : तैयार होने वाली आउटपुट बाइनरी फाइल का नाम निर्धारित करता है।
-c : लिंकिंग चरण को छोड़कर सोर्स कोड को केवल ऑब्जेक्ट फाइल (.o) में कंपाइल करता है।
-Wall : कोड में छिपी गलतियों और संदिग्ध सिंटैक्स को पकड़ने के लिए सभी मुख्य चेतावनियों को सक्रिय करता है।
-O2 : बाइनरी साइज और रनटाइम परफॉरमेंस के बीच संतुलन साधते हुए कोड को ऑप्टिमाइज़ करता है।
-std=<standard> : उपयोग में लाए जाने वाले C++ लैंग्वेज स्टैंडर्ड (जैसे c++17, c++20) को स्पष्ट रूप से परिभाषित करता है।
-g : डीबगर्स के माध्यम से कोड विश्लेषण हेतु बाइनरी में डीबगिंग सिंबल्स शामिल करता है।

c++ –version

/usr/bin/c++ सिम्बोलिक लिंक की आंतरिक संरचना और g++ का संबंध

/usr/bin/c++ फाइल की विस्तृत विशेषताओं और सिम्बोलिक लिंक कनेक्शन का निरीक्षण करने के लिए ls -l /usr/bin/c++ कमांड चलाएं। इससे यह स्पष्ट होता है कि c++ कमांड वास्तव में किस टारगेट फाइल को पॉइंट कर रही है।

ls -l /usr/bin/c++

update-alternatives --display c++ 2>/dev/null || readlink -f /usr/bin/c++ कमांड की मदद से आल्टरनेटिव्स सिस्टम का स्टेटस चेक किया जा सकता है या सिम्बोलिक लिंक के अंतिम गंतव्य तक पहुंचा जा सकता है। इसके जरिए यह सुनिश्चित होता है कि c++ निष्पादित करने पर असल में कौन सा कंपाइलर बाइनरी सक्रिय होता है।

update-alternatives –display c++ 2>/dev/null || readlink -f /usr/bin/c++

बुनियादी C++ प्रोग्राम का निर्माण और c++ कमांड से कंपाइलेशन

कंपाइलेशन प्रक्रिया के व्यावहारिक अभ्यास के लिए कंसोल आउटपुट प्रदर्शित करने वाली hello.cpp सोर्स फाइल तैयार करें।

cat « ‘EOF’ > hello.cpp
#include 
int main() {
std::cout « “Hello from Linux c++!” « std::endl;
return 0;
}
EOF

c++ कमांड का उपयोग करके hello.cpp को कंपाइल करें, जिससे उपयुक्त कोड ऑप्टिमाइजेशन और वार्निंग डिटेक्शन के साथ hello निष्पादन योग्य फाइल तैयार हो सके। यदि कोड पूरी तरह त्रुटिरहित है, तो टर्मिनल पर बिना किसी अतिरिक्त संदेश के प्रक्रिया पूर्ण हो जाती है।

c++ -Wall -O2 -o hello hello.cpp

वर्तमान डायरेक्टरी से नव-निर्मित hello बाइनरी को निष्पादित करें। टर्मिनल पर सोर्स कोड में लिखा गया संदेश "Hello from Linux c++!" प्रिंट होकर कार्यप्रणाली की पुष्टि करता है।

./hello

आधुनिक C++20 स्टैंडर्ड (-std=c++20) के साथ कंपाइलेशन

आधुनिक C++20 सिंटैक्स का परीक्षण करने के उद्देश्य से std::string_view और constexpr कीवर्ड्स का उपयोग करते हुए modern.cpp सोर्स फाइल बनाएं।

cat « ‘EOF’ > modern.cpp
#include 
#include <string_view>
int main() {
constexpr std::string_view msg = “Modern C++20 on Ubuntu”;
std::cout « msg « std::endl;
return 0;
}
EOF

-std=c++20 फ्लैग लागू करके कंपाइलर को C++20 भाषा विनिर्देशों के अनुसार modern.cpp को प्रोसेस करने का निर्देश दें और modern एग्जीक्यूटेबल फाइल जनरेट करें। कोड मान्य होने पर कंपाइलर चुपचाप बाइनरी तैयार कर देता है।

c++ -std=c++20 -o modern modern.cpp

तैयार modern बाइनरी को रन करके कंपाइल किए गए प्रोग्राम का आउटपुट जांचें। स्क्रीन पर "Modern C++20 on Ubuntu" स्ट्रिंग प्रदर्शित होना यह प्रमाणित करता है कि आधुनिक मानक सफलतापूर्वक संकलित हो चुका है।

./modern

इस ट्यूटोरियल में हमने लिनक्स इकोसिस्टम में c++ कमांड के मूल स्वरूप, g++ के साथ इसके सिम्बोलिक लिंक संबंधों और व्यावहारिक कंपाइलेशन चरणों को कवर किया है। इन कंपाइलर विकल्पों का प्रयोग करके आप अपनी आवश्यकताओं के अनुकूल एक तेज और सुव्यवस्थित C++ बिल्ड प्रक्रिया स्थापित कर सकते हैं।