Về gcc và g++
Bài đăng này đã không được cập nhật trong 2 năm
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>
int isPrime(int number) {
if (number <= 1) {
return 0;
}
double sqrtOfNumber = sqrt(number);
for (int i = 2; i < sqrtOfNumber; i++) {
if (number % i == 0) {
return 0;
}
}
return 1;
}
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: in function `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
All rights reserved