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

Cách cài đặt GCC 14 và sử dụng C++23

0 0 2

Người đăng: Vũ Tuấn

Theo Viblo Asia

GCC 14 mang đến nhiều cải tiến mới về khả năng sử dụng. Mặc dù GCC 15 đã có mặt, nhưng nhiều hệ thống vẫn chưa có trong kho phần mềm của trình quản lý gói – trong khi GCC 14 thì đã có! Ví dụ như trên Ubuntu.

Nếu bạn đang cập nhật hệ thống nhưng vẫn chưa thấy bản cập nhật mới, có thể là vì nó chưa được đặt làm mặc định. Tuy nhiên, bạn vẫn có thể cài đặt và đặt nó làm trình biên dịch mặc định cho hệ thống.

Hãy cùng xem cách thực hiện ngay sau đây!

Cài đặt

Để cài đặt trên Ubuntu, bạn chỉ cần dùng APT:

Đầu tiên, cập nhật danh sách kho:

sudo apt update && sudo apt upgrade

Giờ chỉ cần cài đặt GCC 14, cụ thể là g++:

sudo apt install g++-14

Sau khi cài đặt xong, lệnh g++ có thể vẫn chưa dùng bản mới:

g++ --version
g++-13 (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0

Tuy nhiên, bạn có thể dùng lệnh g++-14:

g++-14 --version
g++-14 (Ubuntu 14.2.0-4ubuntu2~24.04) 14.2.0

Đặt làm mặc định cho hệ thống

Để đặt GCC 14 làm mặc định khi gọi g++, thực hiện các bước sau:

  1. Thêm GCC 14 như một lựa chọn thay thế:
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100
  1. Chọn tương tác trình biên dịch:
sudo update-alternatives --config g++

Chọn số tương ứng với g++-14, thường là 2, nếu trùng thì cứ chọn lại số đó để buộc hệ thống dùng bản mới.

Sau đó, bạn có thể dùng g++ mà không cần chỉ định rõ phiên bản:

g++ --version
g++ (Ubuntu 14.2.0-4ubuntu2~24.04) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ưu điểm của cách làm trên (thay vì chỉ thay symbolic link):

  • Không làm hỏng hệ thống.
  • Dễ dàng chuyển đổi giữa các phiên bản.
  • Tránh xung đột với apt/dpkg.

Bổ sung

Nếu bạn gặp lỗi với clangd LSP, hãy cài thêm các thư viện sau để đảm bảo tương thích với Clang:

sudo apt install libstdc++-14-dev libc++-dev libc++abi-dev

Kiểm tra với C++23

Nếu bạn viết đoạn mã sau, bạn cần flag -std=c++23 để biên dịch:

print.cpp

#include <print> int main(){ const std::string var{"All"}; std::println("Hello, {}", var);
}

Biên dịch:

g++ -std=c++23 print.cpp

Tự động thêm -std=c++23 (không cần gõ lại mỗi lần)

Bạn có thể thêm alias vào ~/.bashrc, ví dụ:

Đầu tiên, tìm đường dẫn của g++:

which g++

Sau đó thêm alias:

echo 'alias g++="/usr/bin/g++ -std=c++23"' >> ~/.bashrc
source ~/.bashrc

Giờ bạn chỉ cần chạy:

g++ print.cpp

Cách khác: dùng specs

Tạo file specs:

g++ -dumpspecs > ~/.config/specs

Sửa file specs, tìm dòng bắt đầu bằng *cpp: và thay nội dung bên dưới thành:

*cpp:
%{posix:-D_POSIX_SOURCE} -std=c++23

Rồi thêm vào ~/.bashrc:

export GCC_SPEC_FILE=/path/to/specs
alias g++="g++ -specs=$GCC_SPEC_FILE"

Bạn cũng có thể làm tương tự cho gcc (ngôn ngữ C).

Hy vọng mẹo vặt này sẽ giúp ích cho các bạn!

Bình luận

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

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

The Twelve-Factor App, cẩm nang gối đầu giường trong xây dựng application (Phần 1)

Giới thiệu. Ngày nay các phần mềm được triển khai dưới dạng các dịch vụ, chúng được gọi là các web apps hay software-as-a-service (SaaS).

0 0 33

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

8 Sai lầm phổ biến khi lập trình Android

1. Hard code.

0 0 196

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

Popular interview question: What is the difference between Process and Thread? 10 seconds a day

Video được đăng tại channel Tips Javascript

0 0 36

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

Thuật toán và ứng dụng - P1

Mục đích series. . Những bài toán gắn liền với thực tế. Từ đó thấy được tầm quan trọng của thuật toán trong lập trình.

0 0 39

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

Tác dụng của Docker trong quá trình học tập

Docker bây giờ gần như là kiến thức bắt buộc đối với các anh em Dev và Devops, nhưng mà đối với sinh viên IT nói chung vẫn còn khá mơ hồ và không biết tác dụng thực tế của nó. Hôm nay mình sẽ chia sẻ

0 0 38

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

Làm giàu trong ngành IT

Hầu như mọi người đều đi làm để kiếm tiền, ít người đi làm vì thấy cái nghề đó thú vị lắm. Bây giờ vất cho mình 100 tỷ bảo mình bỏ nghề thì mình cũng bỏ thôi.

0 0 44