यहां हम देखेंगे कि GCC (GNU C कंपाइलर) का उपयोग करके C++ प्रोग्राम कैसे कंपाइल करें। मान लें, हम इस प्रोग्राम को कंपाइल करना चाहते हैं।
उदाहरण प्रोग्राम
#include <iostream>
using namespace std;
int main() {
cout << "Hello World. यह C++ प्रोग्राम है" << endl;
return 0;
}
यदि यह C प्रोग्राम है, तो हम GCC से ऐसे कंपाइल कर सकते हैं:
gcc test.c
लेकिन यदि हम उस स्थान पर C++ फ़ाइलनाम डालते हैं, तो यह कुछ त्रुटि उत्पन्न कर सकता है।
gcc test.cpp
आउटपुट (लिंकर त्रुटि)
/tmp/ccf1KGDi.o: In function `main': test.cpp:(.text+0xe): undefined reference to `std::cout' test.cpp:(.text+0x13): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<<...' ... collect2: error: ld returned 1 exit status
यह कंपाइलेशन त्रुटि नहीं है। यह लिंकिंग त्रुटि है। सही लिंकर जोड़ने के लिए, हमें -lstdc++ विकल्प का उपयोग करना होगा।
gcc test.cpp -lstdc++
आउटपुट
$ ./a.out Hello World. यह C++ प्रोग्राम है
व्याख्या
gccड्राइवर फाइल एक्सटेंशन के आधार पर सही फ्रंटएंड चुनता है (.cpp → C++ कंपाइलर)।- हालांकि,
gccलिंकर चरण में ऑटोमैटिकली C++ स्टैंडर्ड लाइब्रेरी (libstdc++) लिंक नहीं करता। g++ड्राइवर ऑटोमैटिकली -lstdc++ जोड़ता है।
सही तरीके
| विधि | कमांड | टिप्पणी |
|---|---|---|
| सिफारिश (C++ के लिए) | g++ test.cpp | सबसे सरल, ऑटो लिंकिंग |
| gcc के साथ मैनुअल | gcc test.cpp -lstdc++ | काम करता है लेकिन मैनुअल |
| अलग कंपाइल + लिंक | g++ -c test.cpp -o test.o && g++ test.o -o test | बड़े प्रोजेक्ट्स के लिए |
| C++ मानक निर्दिष्ट करें | g++ -std=c++17 test.cpp | आधुनिक C++ के लिए |
अन्य सामान्य लिंकर फ्लैग्स
# पथ्रेड्स लिंक करें g++ -pthread thread_demo.cpp # मैथ लाइब्रेरी लिंक करें g++ -lm math_demo.cpp # कस्टम लाइब्रेरी पथ g++ -L/path/to/lib -lmylib main.cpp # स्टेटिक लिंकिंग (आमतौर पर अनुशंसित नहीं) g++ -static test.cpp
सर्वोत्तम अभ्यास: C++ कोड के लिए हमेशा g++ (या clang++) का उपयोग करें। यह सही लिंकिंग और C++-विशिष्ट विकल्पों के डिफ़ॉल्ट सुनिश्चित करता है।