Về gcc và g++

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

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>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

Bài viết liên quan

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,