G ++ සහ gcc අතර වෙනස කුමක්ද? සාමාන්ය c ++ සංවර්ධනය සඳහා භාවිතා කළ යුතු ඒවා මොනවාද?
G ++ සහ gcc අතර වෙනස කුමක්ද? සාමාන්ය c ++ සංවර්ධනය සඳහා භාවිතා කළ යුතු ඒවා මොනවාද?
Answers:
gcc
හා g++
යනු GNU Compiler ක සම්පාදක-රියදුරන් එකතුව (අ කාලය පමණක් GNU මත වරක් වූ C කම්පයිලරය ).
cc1
cc1plus
ලිපිගොනු වර්ගය අනුව කුමන පසුබිම් ( ...) ඇමතිය යුතුද යන්න ඔවුන් ස්වයංක්රීයව තීරණය කළද, ඒවා ඉක්මවා නොගියහොත් -x language
ඔවුන්ට යම් වෙනස්කම් තිබේ.
ඔවුන්ගේ පෙරනිමි වල වඩාත්ම වැදගත් වෙනස වන්නේ ඒවා ස්වයංක්රීයව සම්බන්ධ වන පුස්තකාලයන් ය.
ගල්ෆ් අන්තර්ජාල ප්රලේඛනය අනුව ලින්ක් විකල්ප සහ ආකාරය ග්රෑම් ++ පළ කළහ ඇත , g++
සමාන වේ gcc -xc++ -lstdc++ -shared-libgcc
(1 වන සම්පාදක විකල්පය වන අතර, 2 වන දෙකක් linker විකල්ප). -v
විකල්පය සමඟ දෙකම ධාවනය කිරීමෙන් මෙය පරීක්ෂා කළ හැකිය (එය ක්රියාත්මක වන පසුබිම් මෙවලම් දාම විධාන පෙන්වයි).
GCC: GNU සම්පාදක එකතුව
gcc
: GNU C Compiler
g++
: GNU C ++ Compiler
ප්රධාන වෙනස්කම්:
gcc
සම්පාදනය කරනු ඇත: *.c\*.cpp
ගොනු පිළිවෙලින් C සහ C ++ ලෙස.g++
සම්පාදනය කරනු ඇත: *.c\*.cpp
ගොනු නමුත් ඒවා සියල්ලම C ++ ගොනු ලෙස සලකනු ලැබේ.g++
වස්තු ලිපිගොනු සම්බන්ධ කිරීමට භාවිතා කරන්නේ නම් එය ස්වයංක්රීයව std C ++ පුස්තකාලවලට සම්බන්ධ වේ (මෙය gcc
නොකරයි).gcc
සී ගොනු සම්පාදනය කිරීමේදී පූර්ව නිශ්චිත මැක්රෝස් අඩුය.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
gcc
පසු කිරීමෙන් ඔබට std C ++ පුස්තකාලය සම්බන්ධ කළ හැකිය -lstdc++
.
gcc -lstdc++
ඇත , එබැවින් තවමත් ඔබට සමාන හැසිරීමක් නොලැබෙනු ඇත g++
. අපි එම භාෂාවට විශේෂිත වූ හැසිරීම් සියල්ලම එහි රියදුරු තුළට දමන්නේ හේතුවක් ඇතුවයි. :-)
-lstdc++
ගණිතය, ආර්ටීටීඅයි සහ ව්යතිරේක තොරතුරු මත යැපීම් නැති වී තවමත් නියම කිරීමෙන් පමණක් සම්පූර්ණ සී ++ සම්මත පුස්තකාලය භාවිතා කළ නොහැක . ලබා දී ඇති ටෙස්ට් කේස් සබැඳි හෝ අසමත් වන්නේ මෙහෙයුම් පද්ධතිය මත වන අතර ටෙස්ට් කේස් විසින් භාවිතා කරනු ලබන සී ++ විශේෂාංග මත රඳා පවතී, එම නිසා නැවතත් එම දැනුම සියල්ලම පරිශීලකයාට භාර දීම වෙනුවට ජී ++ ධාවකයට ගොඩනගා ඇත. .
gcc -lstdc++
අනෙකුත් මෙහෙයුම් පද්ධති , විශේෂයෙන් ඉලක්කය කාවැද්දූ වේදිකාවක් වන විට. වාසනාවකට මෙන්, අපි මුලින් g ++ නැව්ගත කරන්නේ එබැවිනි.
-dumpspec
කාවැද්දූ පද්ධතියක් ඉලක්ක කර ගත් හරස් සම්පාදකයෙකු මත ධාවනය කරන්නේ නම් , ඔබට වෙනස්කම් පෙනෙනු ඇත. සම්බන්ධක වෙනස්කම් වලට වඩා වැඩි යමක් ඇත ... නැවතත්, ඔබේ පිළිතුර වූයේ එයයි (පෙර සැකසුම් මැක්රෝස්, මාර්ග, බහු ධාවන පුස්තකාල ඇතුළත්). අපි එකිනෙකා පසුකරමින් සිටින බවක් පෙනේ, නමුත් හිටපු ජීසීසී නඩත්තුකරුවෙකු ලෙස, මම ඔබට සහතික වෙමි, පෙරටුගාමී දේ සහ නැති දේ ගැන මම හොඳින් දනිමි.
C ++ සඳහා ඔබ g ++ භාවිතා කළ යුතුය.
එය එකම සම්පාදකයෙකි (උදා: GNU සම්පාදක එකතුව). GCC හෝ G ++ වෙනස් පෙරනිමි විකල්පයන් සහිත වෙනස් ඉදිරිපස කෙළවරක් තෝරන්න.
කෙටියෙන් කිවහොත්: ඔබ g ++ භාවිතා කරන්නේ නම්, C ++ සම්මත පුස්තකාල සමඟ සම්බන්ධ වීමට ඔබට අවශ්ය විය හැකි බව ෆ්රොන්ටෙන්ඩ් සම්බන්ධකයට කියයි. Gcc frontend එය නොකරනු ඇත (ඔබ නිවැරදි විධාන රේඛා විකල්පයන් සමත් වුවහොත් එය ඔවුන් සමඟ සම්බන්ධ විය හැකිය).
g++
සහ අතර ඇති වෙනස gcc
කුමක්ද?
gcc
"GNU C Compiler" යන තනි භාෂාවෙන් පරිණාමය වී ඇත්තේ බහු භාෂා "GNU Compiler Collection" ලෙසිනි. "GNU C Compiler" යන පදය සමහර විට C වැඩසටහන්කරණයේ සන්දර්භය තුළ භාවිතා වේ.
මෙම g++
වන යනු GNU Compiler එකතුව සඳහා C ++ compiler. gnat
ඇඩා සම්පාදකයා මෙන් gcc
. GNU Compiler Collection (GCC) භාවිතා කිරීම බලන්න
උදාහරණයක් ලෙස, උබුන්ටු 16.04 සහ 18.04 man g++
විධානය මඟින් GCC(1)
අත්පොත පිටුව ලබා දෙයි.
උබුන්ටු 16.04 සහ 18.04 හි man gcc
සඳහන් වන්නේ ...
g++
බොහෝ දුරට එකම විකල්පයන් පිළිගනීgcc
සහ පෙරනිමිය ...
... භාවිතය
gcc
C ++ පුස්තකාලය එක් නොකරයි.g++
යනු GCC ලෙස හඳුන්වන වැඩසටහනක් වන අතර C ++ පුස්තකාලයට සම්බන්ධ වීම ස්වයංක්රීයව නියම කරයි. -X භාවිතා නොකරන්නේ නම් එය C ප්රභව ගොනු වෙනුවට .c, .h සහ .i ගොනු C ++ ප්රභව ගොනු ලෙස සලකයි. C ++ සම්පාදනයන් සඳහා භාවිතා කිරීම සඳහා .h දිගුවක් සහිත C ශීර්ෂ ගොනුවක් පූර්ව සම්පාදනය කිරීමේදී මෙම වැඩසටහන ප්රයෝජනවත් වේ.
සහ gcc
අතර ඇති විකල්ප විචල්යයන් පිළිබඳ වැඩි විස්තර සඳහා මෑන් පිටු සොයන්න .gcc
g++
සාමාන්ය c ++ සංවර්ධනය සඳහා භාවිතා කළ යුත්තේ කුමක්ද?
තාක්ෂණික වශයෙන්, අදාළ විකල්ප සැකසුම් සමඟ සාමාන්ය C ++ සංවර්ධනය සඳහා gcc
හෝ g++
භාවිතා කළ හැකිය. කෙසේ වෙතත්, g++
පෙරනිමි හැසිරීම ස්වාභාවිකවම C ++ සංවර්ධනයකට පෙළ ගැසී ඇත.
මෙම උබුන්ටු 18,04 'gcc' man පිටුව එක් කල, සහ උබුන්ටු 20,04 , ඇති දිගින් දිගටම ඒ සඳහා පහත සඳහන් ඡේදය:
GCC ධාවනය කිරීම සඳහා සුපුරුදු ක්රමය නම්
gcc
, ක්රියාත්මක කළ හැකි කැඳවීම , හෝmachine-gcc
හරස් සම්පාදනය කිරීමේදී හෝmachine-gcc-version
GCC හි නිශ්චිත අනුවාදයක් ධාවනය කිරීමයි. ඔබ C ++ වැඩසටහන් සම්පාදනය කරන විට,g++
ඒ වෙනුවට GCC කැඳවිය යුතුය .
සැලකිය යුතු වෙනසක් නම්, ඔබ .c
ගොනුවක් gcc වෙත යැවුවහොත් එය C ලෙස සම්පාදනය වේ.
G ++ හි පෙරනිමි හැසිරීම නම් .c
ගොනු C ++ ලෙස සැලකීමයි ( -x c
නිශ්චිතව දක්වා නොමැති නම්).
Gcc සහ g ++ විධානයන් බොහෝ සමාන දේ කළත්, g ++ නිර්මාණය කර ඇත්තේ C ++ වැඩසටහනක් සම්පාදනය කිරීමට ඔබ ඉල්ලා සිටින විධානය ලෙස ය; එය ස්වයංක්රීයව නිවැරදි දේ කිරීමට අදහස් කරයි.
තිරය පිටුපස, ඔවුන් ඇත්ත වශයෙන්ම එකම වැඩසටහනකි. මා තේරුම් ගත් පරිදි, ගොනු නාම දිගුව මත පදනම්ව වැඩසටහනක් C ලෙස හෝ C ++ ලෙස සම්පාදනය කළ යුතුද යන්න දෙදෙනාම තීරණය කරයි. දෙකම C ++ සම්මත පුස්තකාලයට සම්බන්ධ කිරීමට හැකියාව ඇත, නමුත් පෙරනිමියෙන් මෙය කරන්නේ g ++ පමණි. එබැවින් ඔබට සම්මත පුස්තකාලයට සම්බන්ධ වීමට අවශ්ය නොවන C ++ හි ලියා ඇති වැඩසටහනක් තිබේ නම්, නිවැරදි දේ කිරීමට gcc සිදුවනු ඇත; නමුත් එසේ නම් g ++ ද එසේ වනු ඇත. එබැවින් සාමාන්ය C ++ සංවර්ධනය සඳහා g ++ භාවිතා නොකිරීමට කිසිදු හේතුවක් නැත.
මම ගැටලුව ගැන උනන්දු වී අත්හදා බැලීම් කිහිපයක් කළෙමි
ඉන්පසු මම මගේ වින්ඩෝස් යන්ත්රයේ gcc.exe සහ g ++ exe සමඟ අත්හදා බැලීමට උත්සාහ කළෙමි:
$ 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
මම c89, c99, සහ c ++ 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
නමුත් මම "gnu compiler collection" මෙවලම එම ආකාරයෙන් ක්රියාත්මක කිරීමට උත්සාහ කරන විට:
$ 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]
නමුත් මෙය තවමත් කිසිදු දෝෂයකින් තොරව ක්රියා කරයි
$ gcc -x c++ -std=c++98 test_cpp.c
මෙයද
$ 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;
}
සොයා ගැනීම්:
ක්රියාවලි ගස දෙස බැලුවහොත්, gcc, සහ g ++ වෙනත් මෙවලම් වලට පිටුබලය වන බව පෙනේ, ඒවා මගේ පරිසරයේ: cc1plus.exe, cc1.exe, collection2.exe, as.exe, ld.exe
ඔබට නිවැරදි දිගුවක් තිබේ නම් හෝ නිවැරදි -std -x ධජ සකසා ඇත්නම් gcc මෙටටූල් ලෙස හොඳින් ක්රියා කරයි. මෙය බලන්න
“GCC” යනු GNU සම්පාදක එකතුව සඳහා පොදු කෙටිමං යෙදුමකි. මෙය සම්පාදකයාගේ වඩාත් පොදු නම වන අතර, සී වැඩසටහන් සම්පාදනය කිරීම සඳහා අවධාරණය කරන විට භාවිතා කරන නම (කලින් කෙටියෙන් දැක්වෙන්නේ “ග්නූ සී කම්පයිලර්” යන්නයි).
C ++ සම්පාදනය ගැන සඳහන් කිරීමේදී, සම්පාදකයා “G ++” ලෙස හැඳින්වීම සාමාන්ය දෙයකි. එක් සම්පාදකයෙකු පමණක් සිටින බැවින්, භාෂා සන්දර්භය කුමක් වුවත් එය “GCC” ලෙස හැඳින්වීම නිවැරදි ය; කෙසේ වෙතත්, C ++ වැඩසටහන් සම්පාදනය කිරීමට අවධාරණය කරන විට “G ++” යන පදය වඩාත් ප්රයෝජනවත් වේ.
මම ලිනක්ස් පද්ධතියක gcc සහ g ++ පරීක්ෂා කරමින් සිටියෙමි. MAKEFILE භාවිතා කිරීමෙන්, මට "GNU make" භාවිතා කරන සම්පාදකය අර්ථ දැක්විය හැකිය. "සී ප්ලස් ප්ලස්" හි ඊනියා "ගතික මතකය" ස්ථානගත කිරීමේ ලක්ෂණයෙන් මම පරීක්ෂා කළේ:
int main(){
int * myptr = new int;
* myptr = 1;
printf("myptr[0] is %i\n",*myptr);
return 0;
}
මගේ පරිගණකයේ සාර්ථකව සම්පාදනය කළ හැක්කේ g ++ ට පමණක් වන අතර gcc දෝෂය වාර්තා කරයි
undefined reference to `operator new(unsigned long)'
එබැවින් මගේම නිගමනය වන්නේ gcc "C plus plus" සඳහා පූර්ණ සහය නොදක්වන බවයි. C ++ ප්රභව ගොනු සඳහා g ++ තෝරා ගැනීම වඩා හොඳ විකල්පයක් බව පෙනේ.
gcc සහ g ++ යන දෙකම GNU සම්පාදක වේ. ඔවුන් දෙදෙනාම c සහ c ++ සම්පාදනය කරයි. වෙනස වන්නේ * .c ගොනු සඳහා gcc එය ac වැඩසටහනක් ලෙස සලකන අතර g ++ එය ac ++ වැඩසටහනක් ලෙස සලකයි. * .cpp ගොනු c ++ වැඩසටහන් ලෙස සැලකේ. c ++ යනු c හි සුපිරි කට්ටලයක් වන අතර වාක්ය ඛණ්ඩය වඩාත් දැඩි බැවින් උපසර්ගය ගැන සැලකිලිමත් වන්න.
g++
අර්ථ .cc
දැක්විය හැකි බව සලකන්න .