- vừa được xem lúc

Về gcc và g++

0 0 29

Người đăng: Betty

Theo Viblo Asia

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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tại sao Rails lại dùng cả Webpack lẫn Sprocket?

Khi Rails 6 được ra mắt, có thể bạn đã từng tự hỏi. WTF, sao Webpack đã được add vào rồi, mà Sprocket vẫn tồn tại thế kia . Chẳng phải Webpack và Sprocket được dùng để giải quyết chung một công việc hay sao. Hoặc cả đây:.

0 0 59

- vừa được xem lúc

Tìm hiểu chung về LLVM

Không hề khó khăn khi nhận thấy rằng các ngôn ngữ lập trình được tạo ra cũng như cải tiến với tốc độ ngày một cao. Rust của Mozilla, Swift của Apple hay Kotlin của Jetbrain và nhiều ngôn ngữ khác cung cấp cho các nhà phát triển một loạt các lựa chọn mới về tốc độ, độ an toàn, sự tiện lợi, tính di độ

0 0 30

- vừa được xem lúc

Sự khác nhau giữa trình biên dịch và trình thông dịch

Trình biên dịch là trình dịch chuyển đổi từ ngôn ngữ nguồn (các ngôn ngữ lập trình bậc cao) thành ngôn ngữ đối tượng (ví dự như ngôn ngữ máy). Ngược lại với trình biên dịch, trình thông dịch là một ch

0 0 46

- vừa được xem lúc

002: JVM Compiler với C1 Compiler và C2 Compiler

Bài viết nằm trong series Java memory management & performance. Một ví dụ dễ hiểu như sau, ta có một văn bản bằng tiếng Anh, và muốn nó được dịch sang ngôn ngữ tiếng Nhật để được thực thi.

0 0 46

- vừa được xem lúc

003: JVM Code cache và Ahead of Time Compiler

Bài viết nằm trong series Java memory management & performance. Bài viết hôm nay sẽ tìm hiểu kĩ hơn về JVM Code cache, tuning JVM Code cache size và AoT Compiler.

0 0 40

- vừa được xem lúc

Bạn có thực sự hiểu JVM chạy thế nào?

Xin chào a/e đã đang và sẽ thành dev Java như em, chắc 99% mọi người đều biết jvm là máy ảo, java là ngôn ngữ biên dịch,… nhưng an hem có thực sự hiểu cơ chế hoạt động của java và jvm. Tại sao java lạ

0 0 142