Về gcc và g++
Nếu thử man gcc và man g++ trên terminal, bạn đều thấy đều trỏ về 1 page với tiêu đề:
gcc – GNU project C and C++ compiler
Vậy thì khác biệt ở 2 giữa chúng là gì? Cơ bản nhất, gcc sử dụng để biên dịch các file .c, ngược lại với g++ sẽ biên dịch các file .cpp. Thực tế, có thể dùng cả 2 trình biên dịch cho cả 2 ngôn ngữ, tuy nhiên vẫn có sự khác biệt: g++ nếu biên dịch file c sẽ vẫn coi nó là file cpp bình thường, còn gcc sẽ coi c và cpp là riêng biệt.
Ngoài ra, cái khác biệt nhất mà mình muốn đề cập đến:
gcc |
g++ |
|---|---|
Using g++ to link the object files, files automatically links in the std C++ libraries. |
gcc does not do this. |
Ví dụ cho khác biệt trên là thư viện math.h, ví dụ với đoạn code c sau:
#include<math.h>intisPrime(int number){if(number <=1){return0;}double sqrtOfNumber =sqrt(number);for(int i =2; i < sqrtOfNumber; i++){if(number % i ==0){return0;}}return1;}
Sử dụng câu lệnh gcc main.c -o main, gcc sẽ vả vào mặt bạn với lỗi sau:
/usr/bin/ld: /tmp/cccVnyTo.o: infunction`isPrime':
main.c:(.main+0x5a): undefined reference to `sqrt'
Tuy nhiên, nếu biên dịch lại với g++, vẫn câu lệnh có cú pháp trên: g++ main.c -o main, chương trình sẽ chạy ngon ơ.
Khác biệt ở đây chính thư viện math.h không được link 1 cách tự động khi sử dụng gcc, ngược lại với g++. Nên nếu muốn sử dụng gcc để biên dịch, bạn cần thêm arg -lm để link các thư viện maths.
$ gcc main.c -o main -lm
Bonus
Có thể coi g++ tương đương với gcc -xc++ -lstdc++ -shared-libgcc.
References
Nguồn: viblo.asia
