জিসিসি সহ একটি সি ++ প্রোগ্রাম সংকলন


88

প্রশ্ন: জিসিসি সংকলক সহ একটি সি ++ প্রোগ্রাম কীভাবে সংকলন করবেন?

তথ্য.সি:

#include<iostream>
using std::cout;
using std::endl;
int main()
{
   #ifdef __cplusplus
   cout << "C++ compiler in use and version is " << __cplusplus << endl;
   #endif
   cout <<"Version is " << __STDC_VERSION__ << endl;
   cout << "Hi" << __FILE__ << __LINE__ << endl;
}

এবং যখন আমি সংকলন করার চেষ্টা করি info.c

$ gcc info.C

Undefined                       first referenced
 symbol                             in file
cout                                /var/tmp/ccPxLN2a.o
endl(ostream &)                     /var/tmp/ccPxLN2a.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o
ostream::operator<<(int)            /var/tmp/ccPxLN2a.o
ostream::operator<<(long)           /var/tmp/ccPxLN2a.o
ostream::operator<<(char const *)   /var/tmp/ccPxLN2a.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status

জিসিসি সংকলক কি সি ++ প্রোগ্রাম সংকলন করতে সক্ষম নয়? সম্পর্কিত নোটে, gcc এবং g ++ এর মধ্যে পার্থক্য কী। ধন্যবাদ,


উত্তর:


138

জিসিসি আসলে সি ++ কোডটি ঠিকঠাক সংকলন করতে পারে। আপনি যে ত্রুটিগুলি পেয়েছেন তা লিঙ্কার ত্রুটি, সংকলক ত্রুটি নয়।

প্রতিক্রিয়াগুলি হ'ল আপনি যদি সংকলন লাইনটি এটি পরিবর্তন করেন তবে:

gcc info.C -lstdc++

যা এটি স্ট্যান্ডার্ড সি ++ লাইব্রেরির সাথে লিঙ্ক করে তোলে, তবে এটি ঠিক কাজ করবে।

তবে আপনার নিজের জীবনকে আরও সহজ করা এবং জি ++ ব্যবহার করা উচিত।


সম্পাদনা:

রুপ অন্য উত্তরে তার মন্তব্যে সেরা বলেছেন :

[...] জিসিসি ফাইল এক্সটেনশনের উপর ভিত্তি করে সঠিক ব্যাক-এন্ড সংকলক নির্বাচন করবে (যেমন সি হিসাবে একটি .c এবং সি। ++ হিসাবে একটি সংকলন করবে) এবং কেবলমাত্র স্ট্যান্ডার্ড সি এবং জিসিসি সহায়ক লাইব্রেরির সাথে বাইনারি লিঙ্ক করবে নির্বিশেষে ইনপুট ভাষা; g ++ এক্সটেনশনের ভিত্তিতে সঠিক ব্যাক-এন্ডও নির্বাচন করবে কেবলমাত্র আমি মনে করি এটি পরিবর্তে সমস্ত সি উত্সকে সি ++ হিসাবে সংকলন করে (যেমন এটি .c এবং .cc উভয়ই সি ++ হিসাবে সংকলন করে) এবং এতে ইনপুট ভাষা নির্বিশেষে এর লিঙ্ক পদক্ষেপে libstdc ++ অন্তর্ভুক্ত রয়েছে।


42

আপনি যদি কোডটিকে একটি .c এক্সটেনশন দেন তবে সংকলকটি এটি সি কোড বলে মনে করে, সি ++ নয়। এবং সি ++ সংকলক ড্রাইভারকে জি ++ বলা হয়, আপনি যদি জিসিসি ড্রাইভার ব্যবহার করেন তবে আপনার লিঙ্কারের সমস্যা হবে, কারণ স্ট্যান্ডার্ড সি ++ লাইব্রেরিগুলি ডিফল্টরূপে লিঙ্ক করা হবে না। তাহলে তুমি চাও:

g++ myprog.cpp

এমনকি বড় হাতের সি। এক্সটেনশনটি ব্যবহার করার বিষয়টিও বিবেচনা করবেন না, যদি না আপনি কখনই আপনার কোডটি পোর্ট করতে না চান এবং আপনি যাদের সাথে কাজ করেন তাদের দ্বারা ঘৃণা করার জন্য প্রস্তুত না হন।


@ নীল: আমি যা বলতে পারি তা থেকে, জিসিসি একটি .C(মূলধন) এক্সটেনশনকে সি ++ এক্সটেনশন বিবেচনা করে। নিম্নলিখিতটি ঠিক কাজ করে: gcc test.C -lstdc++ -o testবা g++ test.C -o test
ইভান তেরান

4
@ ইভান হ্যাঁ, অবশ্যই এটি করে। এর অর্থ এই নয় যে আপনার কখনই এটি ব্যবহার করা উচিত, কারণ এটি মারাত্মক পোর্টেবিলিটি সমস্যা সৃষ্টি করবে, সমস্ত কেস-সংবেদনশীল ফাইলের নাম হিসাবে do সি ++ ফাইলগুলির জন্য এক্সটেনশনটি সর্বদা .cpp হওয়া উচিত। এটি কোনও সমস্যা সৃষ্টি করে না এবং এটি সমস্ত সাধারণ অপারেটিং সিস্টেমে কাজ করার গ্যারান্টিযুক্ত।


12

ডিফল্টরূপে, gcc ফাইল এক্সটেনশনের উপর ভিত্তি করে ভাষা নির্বাচন করে তবে আপনি gcc কে এইভাবে -x বিকল্পের সাহায্যে একটি ভিন্ন ভাষা ব্যাকএন্ড নির্বাচন করতে বাধ্য করতে পারেন:

gcc -x c++

"বিকল্পের ধরণের আউটপুট নিয়ন্ত্রণ করে" এর অধীনে আরও বিকল্পগুলি জিসিসি ম্যান পৃষ্ঠাতে বিশদভাবে দেওয়া আছে। যেমনঃ http://linux.die.net/man/1/gcc দেখুন (পাঠ্যের জন্য পৃষ্ঠায় সন্ধান করুন-x language )।

ফাইলটি এক্সটেনশন ব্যবহার করে জিসিসি ভাষার অনুমান করতে পারে না এমন ক্ষেত্রে এই সুবিধাটি খুব কার্যকর example


11

জিসিসি এবং জি ++ এর মধ্যে পার্থক্য হ'ল:

     gcc            |        g++
compiles c source   |   compiles c++ source

আপনাকে সি ++ উত্স সংকলন করতে জিসির পরিবর্তে জি ++ ব্যবহার করুন।


16
এটি এর চেয়ে কিছুটা জটিল, অন্য উত্তরগুলির মতো এখানে। জিসিসি ফাইল এক্সটেনশনের উপর ভিত্তি করে সঠিক ব্যাক-এন্ড সংকলক নির্বাচন করবে (উদাহরণস্বরূপ একটি .c কে সি হিসাবে তৈরি করবে এবং সিসি ++ হিসাবে একটি সিসি তৈরি করবে) এবং ইনপুট ভাষা নির্বিশেষে কেবলমাত্র আদর্শ সি এবং জিসিসি সহায়ক লাইব্রেরির সাথে বাইনারি যুক্ত করবে; g ++ এক্সটেনশনের ভিত্তিতে সঠিক ব্যাক-এন্ডও নির্বাচন করবে কেবলমাত্র আমি মনে করি এটি পরিবর্তে সমস্ত সি উত্সকে সি ++ হিসাবে সংকলন করে (যেমন এটি .c এবং .cc উভয়ই সি ++ হিসাবে সংকলন করে) এবং এতে ইনপুট ভাষা নির্বিশেষে এর লিঙ্ক পদক্ষেপে libstdc ++ অন্তর্ভুক্ত রয়েছে।
রুপ

4
@ রুপ: সঠিক, আমি আমার উত্তরে যা বলছিলাম তা মূলত এটি।
ইভান তেরান

1

যদি আমি সঠিকভাবে স্মরণ করি, জিসিসি প্রত্যয় থেকে ফাইল টাইপ নির্ধারণ করে। সুতরাং, এটি foo.cc করুন এবং এটি কাজ করা উচিত।

এবং, আপনার অন্যান্য প্রশ্নের উত্তর দিতে, এটি "জিসিসি" এবং "জি ++" এর মধ্যে পার্থক্য। জিসিসি হ'ল একটি ফ্রন্টএন্ড যা সঠিক সংকলকটি চয়ন করে।


0

এটা আমার জন্য ভাল কাজ করেছে। সেমিডিতে মাত্র একটি লাইন কোড

প্রথমে নিশ্চিত করুন যে আপনি জিসিসি (সি জন্য) বা জি ++ ইনস্টল করেছেন (সি ++ এর জন্য) সংকলক ।

জিসিসি টাইপের জন্য সেন্টিমিটারে:

gcc --version

জি ++ প্রকারের জন্য সেন্টিমিটারে:

g ++ --version

যদি এটি ইনস্টল করা থাকে তবে এগিয়ে যান।

এখন, আপনার .c বা .cpp ব্যবহার করে cmd তৈরি করুন comp

জন্য শব্দবিন্যাস:

gcc -o exe_filename yourfilename.c

উদাহরণ:

gcc -o myfile myfile.c

এখানে exe_filename (উদাহরণস্বরূপ মাইফাইল) হ'ল আপনার .exe ফাইলের নাম যা আপনি সংকলনের পরে উত্পাদন করতে চান (দ্রষ্টব্য: আমি এখানে কোনও এক্সটেনশন রাখিনি )। আর yourfilename.c (উদাহরণে myfile.c) হয় আপনার সোর্স ফাইল যা গ এক্সটেনশন হয়েছে।

এখন আপনার .c ফাইলযুক্ত ফোল্ডারে যান, এখানে আপনি .exe এক্সটেনশন সহ একটি ফাইল পাবেন। শুধু এটি খুলুন। হুররে ..

জন্য .cpp শব্দবিন্যাস:

g ++ -o exe_filename yourfilename.cpp

এটির পরে প্রক্রিয়াটি .c এর মতোই।


4
প্রশ্নটি ছিল "জিসিসি সংকলক সহ একটি সি ++ প্রোগ্রাম কীভাবে সংকলন করবেন?" "জিসিসি সংকলক সহ একটি সি প্রোগ্রাম কীভাবে সংকলন করবেন? বা জি ++ সংকলক সহ একটি সি ++ প্রোগ্রাম কীভাবে সংকলন করবেন?"
ডিভএক্স

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