জি ++ এবং জিসিসির মধ্যে পার্থক্য কী?


উত্তর:


727

gccএবং g++তারা জিএনইউ সংকলক সংগ্রহের সংকলক-ড্রাইভার (যা এককালে কেবল জিএনইউ সি সংকলক ছিল )।

যদিও তারা স্বয়ংক্রিয়ভাবে নির্ধারণ করে যে কোন cc1 cc1plusপ্রকারের ( ...) ফাইল-টাইপের উপর নির্ভর করে কল করা উচিত, যদি না ওভাররাইড করা হয় তবে -x languageতাদের কিছু পার্থক্য রয়েছে।

তাদের ডিফল্টগুলির মধ্যে সম্ভবত সবচেয়ে গুরুত্বপূর্ণ পার্থক্য হ'ল তারা কোন লাইব্রেরিগুলি স্বয়ংক্রিয়ভাবে লিঙ্ক করে।

জিসিসি অনলাইন ডকুমেন্টেশন মতে লিংক অপশন এবং কিভাবে ছ ++, হয় প্রার্থনা , g++সমতূল্য gcc -xc++ -lstdc++ -shared-libgcc(1 ম একটি কম্পাইলার বিকল্প, 2nd দুই linker অপশন আছে) হয়। -vবিকল্পটি দিয়ে এটি চালিয়ে উভয়ই পরীক্ষা করা যায় (এটি ব্যাকএন্ড টুলচেন কমান্ডগুলি চালিত করে)।


13
এই উত্তর থেকে, আমি উপসংহারে পৌঁছেছি যে কার্যকরভাবে g ++ কমান্ডটি কেবল একগুচ্ছ পতাকা সহ জিসিসি .. তবে, লিনাক্সে জিসিসি এবং জি ++ এর জন্য দুটি আলাদা বাইনারি রয়েছে (প্রায় একই আকারের)? আমাদের কেবল একটি বাইনারি এবং একটি সিমলিংক (বা সেই লাইনের পাশাপাশি কিছু) থাকা উচিত নয়?
উচিহাইতাচি

9
@ উচিহলতাছি এই ফাইলগুলি হ'ল লিঙ্কসমূহ এবং সেগুলি বুট করার পরে তারা কোন অনুরোধটি argv[0]ব্যবহার করা উচিত তা পরীক্ষা করে দেখে। এটি ইউনিক্সের মূল ইউটিলিটিগুলির মধ্যে বেশ সাধারণ।
12:58

438

জিসিসি: জিএনইউ সংকলক সংগ্রহ

  • জিএনইউ সংকলক দ্বারা সমর্থিত সমস্ত ভিন্ন ভাষায় রেফারার।

gcc: জিএনইউ সি সংকলক
g++: জিএনইউ সি ++ সংকলক

প্রধান পার্থক্য:

  1. gccসংকলন করবে: *.c\*.cppযথাক্রমে সি এবং সি ++ হিসাবে ফাইলগুলি।
  2. g++*.c\*.cppফাইলগুলি সংকলন করবে: তবে সেগুলি সমস্ত সি ++ ফাইল হিসাবে বিবেচিত হবে।
  3. এছাড়াও আপনি যদি g++অবজেক্ট ফাইলগুলি লিঙ্ক করতে ব্যবহার করেন তবে এটি স্বয়ংক্রিয়ভাবে std C ++ লাইব্রেরিতে লিঙ্ক হয় (এটি gccকরে না)।
  4. gcc সংকলনকারী সি ফাইলগুলিতে কম পূর্বনির্ধারিত ম্যাক্রোগুলি রয়েছে।
  5. gccফাইলগুলি সংকলন *.cppএবং g++সংকলন *.c\*.cppকরতে কয়েকটি অতিরিক্ত ম্যাক্রো রয়েছে।

*.cppফাইলগুলি সংকলনের সময় অতিরিক্ত ম্যাক্রো :

#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern

37
প্যারামিটারটি gccপাস করে আপনি স্ট্যান্ডার্ড সি ++ গ্রন্থাগারটি লিঙ্ক করতে পারেন -lstdc++
ডেনিলসন সা মিয়া

16
'স্ট্যান্ডার্ড লাইব্রেরি'র চেয়ে' জিসিসি 'এবং' জি ++ 'এর মধ্যে আরও পার্থক্য রয়েছে, তাই gcc -lstdc++এখনও আপনার মতো আচরণ পাবেন না g++। আমরা সেই ভাষা-নির্দিষ্ট আচরণের সমস্তটিকে তার নিজস্ব ড্রাইভারের মধ্যে একটি কারণের জন্য রেখেছি, এটার জন্য এটিই রয়েছে। :-)
তি স্টারগা

8
আমার মন্তব্যটি কেবল লিঙ্কিংয়ের কথা বলছে না ... এটাই বিষয়। এমনকি আলোচনাকে লিঙ্কিংয়ের মধ্যে সীমাবদ্ধ রেখেছিলেন (যা আপনার উত্তরটি ছিল না) এখনও কোনও ব্যবহারকারী পুরো নির্দিষ্ট সি ++ স্ট্যান্ডার্ড লাইব্রেরি কেবলমাত্র নির্দিষ্ট করেই ব্যবহার করতে পারবেন না -lstdc++, কারণ সেখানে গণিত, আরটিটিআই এবং ব্যতিক্রম সম্পর্কিত তথ্যের উপর নির্ভরশীলতা অনুপস্থিত থাকবে। প্রদত্ত পরীক্ষার কেস লিঙ্কগুলি বা ব্যর্থতা অপারেটিং সিস্টেমের উপর নির্ভর করে এবং পরীক্ষার ক্ষেত্রে কোন সি ++ বৈশিষ্ট্য ব্যবহার করা হবে তার উপর নির্ভর করে, সেই কারণেই সেই জ্ঞানটি সমস্ত ব্যবহারকারীকে ছেড়ে দেওয়ার পরিবর্তে জি ++ ড্রাইভারে তৈরি করা হয়েছে ।
তি স্টারগা

10
আমাকে বিশ্বাস করুন, আমাদের যখন এই লিনাক্স ব্যবহারকারী তার অসম্পূর্ণ মেকফিলটিকে অন্য প্ল্যাটফর্মে নিয়ে যাওয়ার চেষ্টা করেন তখন আমাদের অনেক আলোচনা হয়। :-) জি ++ লিঙ্ক স্টেজ gcc -lstdc++অন্যান্য ওএসের তুলনায় অনেক কিছু করে, বিশেষত যখন লক্ষ্যটি এম্বেডেড প্ল্যাটফর্ম থাকে। ভাগ্যক্রমে, সেজন্য আমরা প্রথম স্থানে একটি জি ++ প্রেরণ করি।
তি স্টারগা

10
স্পেক স্ট্রিংগুলি সংকলকটির সাথে সুনির্দিষ্টভাবে নির্মিত হয় যা পরবর্তীতে অপারেটিং সিস্টেম এবং লক্ষ্য নির্দিষ্ট করে। সুতরাং আপনি যদি -dumpspecএম্বেড থাকা সিস্টেমকে লক্ষ্য করে কোনও ক্রস সংকলক (উদাহরণস্বরূপ) চালনা করেন তবে আপনি পার্থক্য দেখতে পাবেন। লিঙ্কার পার্থক্য ছাড়াও আরও অনেক কিছু রয়েছে ... যা আবার আপনার উত্তরটি সম্পর্কে যা ছিল (প্রিপ্রসেসর ম্যাক্রোস, একাধিক রানটাইম লাইব্রেরি অন্তর্ভুক্ত)। আমরা একে অপরের অতীত কথা বলে মনে হচ্ছে, কিন্তু একজন প্রাক্তন জিসিসি রক্ষণাবেক্ষণকারী হিসাবে, আমি আপনাকে নিশ্চয়তা দিচ্ছি যে আমি অগ্রভাগগুলি কী এবং কী কী তা সম্পর্কে আমি তার সাথে পরিচিত।
তি স্টারগা

82

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

এটি একই সংকলক (যেমন জিএনইউ সংকলক সংগ্রহ)) জিসিসি বা জি ++ বিভিন্ন ডিফল্ট বিকল্পগুলির সাথে একটি আলাদা ফ্রন্ট-এন্ড চয়ন করুন।

সংক্ষেপে: আপনি যদি g ++ ব্যবহার করেন তবে সম্মুখভাগটি লিঙ্কারে বলবে যে আপনি সি ++ স্ট্যান্ডার্ড লাইব্রেরির সাথে লিঙ্ক করতে চাইতে পারেন। জিসিসি ফ্রন্টএন্ড এটি করবে না (আপনি যদি সঠিক কমান্ড লাইন বিকল্পগুলি পাস করেন তবে এটি তাদের সাথে লিঙ্ক করতে পারে)।


3
+1 এছাড়াও আমার জিএনইউ / লিনাক্স জিসিসি ম্যান পৃষ্ঠাটি বলছে, "আপনি যখন সি ++ প্রোগ্রামগুলি সংকলন করেন, তার পরিবর্তে আপনার জিসিসিকে জি ++ হিসাবে আহ্বান করা উচিত।"
উপবৃত্তাকার দর্শন

35

মধ্যে পার্থক্য কি g++এবং gcc?

gccএকক ভাষা "জিএনইউ সি সংকলক" থেকে একক ভাষায় "জিএনইউ সংকলক সংগ্রহ" হয়ে উঠেছে। "জিএনইউ সি কমপাইলার" শব্দটি এখনও মাঝে মাঝে সি প্রোগ্রামিংয়ের প্রসঙ্গে ব্যবহৃত হয়।

g++ হয় গনুহ কম্পাইলার কালেকশন জন্য সি ++ কম্পাইলার। যেমন gnatঅ্যাডা সংকলক gccজিএনইউ সংকলক সংগ্রহ (জিসিসি) ব্যবহার করে দেখুন

উদাহরণস্বরূপ, উবুন্টু 16.04 এবং 18.04 man g++কমান্ড GCC(1)ম্যানুয়াল পৃষ্ঠাটি দেয়।

উবুন্টু 16.04 এবং 18.04 man gccবলেছে যে ...

g++ বেশিরভাগ হিসাবে একই বিকল্প গ্রহণ করে gcc

এবং এটি ডিফল্ট ...

... এর ব্যবহার gccসি ++ লাইব্রেরি যুক্ত করে না। g++এমন একটি প্রোগ্রাম যা জিসিসি কল করে এবং স্বয়ংক্রিয়ভাবে সি ++ লাইব্রেরির সাথে লিঙ্কিং নির্দিষ্ট করে। এটি -c, .h এবং .i ফাইলগুলিকে সি উত্স ফাইলের পরিবর্তে সি ++ উত্স ফাইল হিসাবে বিবেচনা করে -x ব্যবহার না করা হয়। সি ++ সংকলনে ব্যবহারের জন্য .h এক্সটেনশন সহ সি হেডার ফাইলটি প্রাক-কম্পাইল করার সময় এই প্রোগ্রামটিও কার্যকর।

gccবিকল্পগুলির মধ্যে gccএবং এর মধ্যে আরও তথ্যের জন্য ম্যান পৃষ্ঠাগুলি অনুসন্ধান করুন g++

সাধারণ সি ++ বিকাশের জন্য কোনটি ব্যবহার করা উচিত?

প্রযুক্তিগতভাবে, হয় gccবা g++প্রয়োগযোগ্য বিকল্প সেটিংস সহ সাধারণ সি ++ বিকাশের জন্য ব্যবহার করা যেতে পারে। তবে, g++ডিফল্ট আচরণটি স্বাভাবিকভাবেই একটি সি ++ বিকাশের সাথে সংযুক্ত থাকে।

উবুন্টু 18.04 man পৃষ্ঠা নিম্নলিখিত অনুচ্ছেদ যোগ করেছেন:

জিসিসি চালানোর স্বাভাবিক উপায় হ'ল এক্সিকিউটেবল নামে পরিচিত gcc, বা machine-gccযখন ক্রস-সংকলন করা হয়, বা machine-gcc-versionজিসিসির একটি নির্দিষ্ট সংস্করণ চালানো হয়। আপনি যখন সি ++ প্রোগ্রামগুলি সংকলন করেন, g++তার পরিবর্তে আপনার জিসিসি শুরু করা উচিত ।


21

একটি উল্লেখযোগ্য পার্থক্য হ'ল আপনি যদি কোনও .cফাইলকে জিসিসিতে পাস করেন তবে এটি সি হিসাবে সংকলিত হবে

জি ++ এর ডিফল্ট আচরণ হ'ল .cফাইলগুলিকে সি ++ হিসাবে -x cচিহ্নিত করা ( নির্দিষ্ট না করা পর্যন্ত )।


19
(শেষের দিকে, তবে উত্তরোত্তর জন্য)) অন্যান্য উত্তরগুলি যেমন উল্লেখ করেছে যে এটি কোনওভাবেই "একমাত্র উল্লেখযোগ্য পার্থক্য" নয়, যদি না পাঠকের উল্লেখযোগ্যতার সংকীর্ণ সংজ্ঞা না থাকে।
আন্ডারস্কোর_ডি

16

যদিও gcc এবং g ++ কমান্ডগুলি খুব অনুরূপ কাজ করে, g ++ আপনাকে একটি সি ++ প্রোগ্রাম সংকলন করতে অনুরোধ করতে আদেশ হিসাবে নকশা করা হয়েছে; এটি স্বয়ংক্রিয়ভাবে সঠিক কাজ করার উদ্দেশ্যে।

পর্দার আড়ালে, তারা সত্যই একই প্রোগ্রাম। আমি যেমন বুঝতে পেরেছি, উভয়ই সিদ্ধান্ত নেবে যে ফাইল প্রোগ্রাম এক্সটেনশনের উপর ভিত্তি করে কোনও প্রোগ্রামকে সি হিসাবে বা সি ++ হিসাবে সংকলন করতে হবে। উভয়ই সি ++ স্ট্যান্ডার্ড লাইব্রেরির সাথে লিঙ্ক করতে সক্ষম, তবে কেবল g ++ এটি ডিফল্টরূপে করে। সুতরাং যদি আপনার কাছে সি ++ তে লিখিত কোনও প্রোগ্রাম থাকে যা মানক লাইব্রেরির সাথে লিঙ্ক করার প্রয়োজন হয় না, সিসিটি সঠিক কাজটি করবে; তবে তারপরে, জি ++ হবে। সুতরাং সাধারণ সি ++ বিকাশের জন্য g ++ ব্যবহার না করার সত্যিই কারণ নেই।


12

আমি ইস্যুতে আগ্রহী হয়েছি এবং কিছু পরীক্ষা-নিরীক্ষা করেছি

  1. আমি এখানে বর্ণনাটি পেয়েছি তবে এটি খুব ছোট।

  2. তারপরে আমি আমার উইন্ডোজ মেশিনে gcc.exe এবং g ++ পরীক্ষা করতে চেষ্টা করেছি:

    $ g++ --version | head -n1 
    g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
    
    $ gcc --version | head -n1
    gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3
  3. আমি সি 98, সি 99, এবং সি ++ 1998 সাধারণ পরীক্ষার ফাইলগুলি সংকলনের চেষ্টা করেছি এবং ভাষার জন্য উপযুক্ত এক্সটেনশনগুলির সাথে এটি আমার পক্ষে ভাল কাজ করছে

    gcc -std=c99 test_c99.c
    gcc -std=c89 test_c89.c 
    g++ -std=c++98 test_cpp.cpp
    gcc -std=c++98 test_cpp.cpp
  4. কিন্তু যখন আমি সেই ফ্যাশনে "gnu সংকলক সংগ্রহ" সরঞ্জামটি চালানোর চেষ্টা করি:

    $ gcc -std=c++98 test_cpp.c
    cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]
  5. তবে এটি এখনও কোনও ত্রুটি ছাড়াই কাজ করে

    $ gcc -x c++ -std=c++98 test_cpp.c
  6. এবং এটিও

    $ g++ -std=c++0x test_cpp_11.cpp 

PS টেস্ট ফাইল

$ cat test_c89.c test_c99.c test_cpp.cpp

// C89 compatible file
int main()
{
    int x[] = {0, 2};
    return sizeof(x);
}

// C99 compatible file
int main()
{
    int x[] = {[1]=2};
    return sizeof(x);
}

// C++1998,2003 compatible file
class X{};
int main()
{
    X x;
    return sizeof(x);
}

// C++11
#include <vector>
enum class Color : int{red,green,blue}; // scoped enum
int main()
{
    std::vector<int> a {1,2,3}; // bracket initialization
    return 0;
}

ফলাফল:

  1. প্রক্রিয়া গাছের দিকে নজর দিলে মনে হয় জিসিসি এবং জি ++ হ'ল অন্যান্য সরঞ্জামগুলির ব্যাকএন্ড, যা আমার পরিবেশে রয়েছে: cc1plus.exe, cc1.exe, collection2.exe, as.exe, ld.exe

  2. আপনার যদি সঠিক এক্সটেনশন থাকে বা সঠিক -std -x পতাকা সেট করে থাকে তবে জিসিসি মেটাটুল হিসাবে সূক্ষ্মভাবে কাজ করে। এই দেখুন


9

"জিসিসি" জিএনইউ সংকলক সংগ্রহের জন্য একটি সাধারণ শর্টহ্যান্ড শব্দ। এটি উভয়ই সংকলকের সর্বাধিক সাধারণ নাম এবং যখন সি প্রোগ্রামগুলি সংকলনের উপর জোর দেওয়া হয় তখন নামটি ব্যবহৃত হয় (সংক্ষিপ্ত বিবরণটি আগে "GNU C Compiler" হিসাবে দাঁড়িয়েছিল)।

সি ++ সংকলন উল্লেখ করার সময়, কম্পাইলারটিকে "জি ++" কল করা স্বাভাবিক। যেহেতু কেবলমাত্র একটি সংকলক রয়েছে, ভাষা প্রসঙ্গ যাই হোক না কেন এটিকে "জিসিসি" বলা ঠিক; তবে, সি ++ প্রোগ্রাম সংকলনের উপর জোর দেওয়া হলে "জি ++" শব্দটি বেশি কার্যকর।

আপনি এখানে আরও পড়তে পারেন ।


0

আমি একটি লিনাক্স সিস্টেমে জিসিসি এবং জি ++ পরীক্ষা করছিলাম। মেকফাইল ব্যবহার করে, আমি "জিএনইউ মেক" দ্বারা ব্যবহৃত সংকলক সংজ্ঞায়িত করতে পারি। আমি "সি প্লাস প্লাস" এর তথাকথিত "গতিশীল মেমরি" সনাক্তকরণ বৈশিষ্ট্যটি দিয়ে পরীক্ষা করেছি:

int main(){

int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}

কেবল জি ++ আমার কম্পিউটারে সফলভাবে সংকলন করতে পারে যখন জিসিসি ত্রুটির প্রতিবেদন করবে

undefined reference to `operator new(unsigned long)'

সুতরাং আমার নিজস্ব উপসংহারটি জিসিসি সম্পূর্ণরূপে "সি প্লাস প্লাস" সমর্থন করে না। দেখে মনে হচ্ছে সি ++ উত্স ফাইলগুলির জন্য জি ++ চয়ন করা আরও ভাল বিকল্প।


1. ভাষা নির্বাচন 2. libstdc ++ ও গ্রন্থাগার suhch নির্বাচন করুন: আপনি দুটি কাজ করতে হবে
PersianGulf

-1

জিসিসি এবং জি ++ উভয়ই জিএনইউ সংকলক। তারা উভয় সি এবং সি ++ সংকলন করে। পার্থক্যটি হল * .c ফাইলগুলির জন্য জিসিসি একে এসি প্রোগ্রাম হিসাবে বিবেচনা করে, এবং জি ++ এটিকে এসি ++ প্রোগ্রাম হিসাবে দেখায়। * .cpp ফাইলগুলি সি ++ প্রোগ্রাম হিসাবে বিবেচিত হয়। সি ++ সি এর একটি দুর্দান্ত সেট এবং বাক্য গঠন আরও কঠোর, সুতরাং প্রত্যয় সম্পর্কে সতর্ক থাকুন।


1
সি ++ একটি আলাদা ভাষা, সি-এর কঠোর সুপারস্টেট নয়, তাই ভুল লক্ষ্য ভাষার সাথে সংকলন করা অপ্রত্যাশিত ফলাফলগুলি আনতে পারে। এছাড়াও নোট করুন যে g++এটি .ccএকটি সি ++ হিসাবে ব্যাখ্যা করবে - কেবল ফাইলের নাম এক্সটেনশন।
আন্ডারস্কোর_ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.