+2

Về gcc và g++

Về gccg++

Nếu thử man gccman 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 ccpp 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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí