Fix error[E0463]: can't find crate trong Rust / Cargo

beginner🦀 Rust2026-03-21| Rust (mọi phiên bản), Cargo, Linux / macOS / Windows

Error Message

error[E0463]: can't find crate
#rust#cargo#crate#dependency

Lỗi bạn đang gặp phải

Bạn đã thêm câu lệnh use hoặc dòng extern crate, chạy cargo build, và nhận được thông báo lỗi như sau:

error[E0463]: can't find crate for `serde`
 --> src/main.rs:1:5
  |
1 | use serde::Deserialize;
  |     ^^^^^ can't find crate

Hoặc nếu bạn đang viết code nhúng hoặc no_std:

error[E0463]: can't find crate for `std`

Thường có ba nguyên nhân gây ra lỗi này. Crate chưa được khai báo trong Cargo.toml. Tên crate bị viết sai. Hoặc môi trường build bị lỗi hay thiếu target. Hãy thực hiện các bước dưới đây theo thứ tự — hầu hết các trường hợp được giải quyết ở Bước 1 hoặc 2.

Bước 1 — Kiểm tra Cargo.toml trước tiên

Mở Cargo.toml và xem phần [dependencies]. Nếu crate chưa có trong đó, Cargo không có cách nào tải xuống hoặc liên kết nó. Đơn giản vậy thôi.

[dependencies]
# Crate của bạn có được liệt kê ở đây không?
serde = "1"

Chưa có? Thêm vào bằng một lệnh duy nhất (yêu cầu Cargo 1.62+):

cargo add serde

Nhiều crate phổ biến — serde, tokio, axum — cần khai báo feature flags để mở khóa các tính năng bạn thực sự dùng:

cargo add serde --features derive
cargo add tokio --features full

Sau khi thêm, xác nhận mục đã xuất hiện trong Cargo.toml, rồi build lại:

cargo build

Bước 2 — Xác minh tên crate hoàn toàn chính xác

Tên crate dùng dấu gạch ngang (-) trên crates.io, nhưng dùng dấu gạch dưới (_) trong mã nguồn Rust. Sự không khớp âm thầm này khiến nhiều người mắc bẫy liên tục.

  • Trong Cargo.toml: my-crate = "0.1"
  • Trong mã nguồn Rust: use my_crate::SomeStruct;
# Cargo.toml
[dependencies]
my-crate = "0.1"
// src/main.rs
use my_crate::SomeStruct;  // dấu gạch dưới, không phải gạch ngang

Một lỗi đánh máy trong Cargo.toml — dù chỉ một ký tự sai — có nghĩa là Cargo không tải xuống gì cả và trình biên dịch sẽ báo lỗi. Kiểm tra kỹ chính tả trên crates.io trước khi tiếp tục.

Bước 3 — Làm mới index crate và lock file

Cargo.lock có thể bị mất đồng bộ, đặc biệt sau khi chỉnh sửa thủ công Cargo.toml. Ép làm mới lại:

cargo fetch
cargo build

Vẫn còn lỗi? Cập nhật riêng crate đang gây vấn đề:

cargo update -p serde

Hoặc xóa toàn bộ lock file và để Cargo giải quyết lại từ đầu:

cargo update

Bước 4 — Đảm bảo bạn đang ở đúng thành viên workspace

Workspace có một Cargo.toml gốc và các crate thành viên riêng biệt. Mỗi thành viên quản lý dependencies của riêng mình — root không tự động chia sẻ chúng.

# workspace root Cargo.toml
[workspace]
members = ["app", "lib"]

Nếu lỗi xuất phát từ app/src/main.rs, hãy kiểm tra app/Cargo.toml, không phải root. Sau đó chỉ định rõ package cần build:

cargo build -p app

Bước 5 — Kiểm tra Rust edition và cách dùng extern crate

Rust 2015 yêu cầu khai báo extern crate tường minh ở khắp nơi. Rust 2018 trở lên đã bỏ yêu cầu đó — bạn chỉ cần viết use trực tiếp. Các khai báo theo phong cách 2015 còn sót lại trong project 2021 sẽ gây nhầm lẫn.

Nếu Cargo.toml của bạn có edition = "2021", hãy xóa các dòng như:

extern crate serde; // xóa dòng này

Và thay bằng:

use serde::Deserialize;

Trường hợp duy nhất vẫn cần extern crate hiện nay là các proc-macro crate và một số trường hợp đặc biệt với no_std như extern crate alloc;.

Bước 6 — Trường hợp no_std: can't find crate for std

Đang viết firmware hoặc WebAssembly và thấy lỗi can't find crate for 'std'? Target biên dịch của bạn không có thư viện chuẩn. Thêm #![no_std] vào đầu crate root và chuyển từ std sang core:

#![no_std]

use core::fmt;
use core::mem;

Hoặc, nếu bạn vẫn muốn dùng std, hãy kiểm tra xem target phù hợp đã được cài chưa:

# Liệt kê các target đã cài
rustup target list --installed

# Thêm target có hỗ trợ std
rustup target add x86_64-unknown-linux-gnu

Bước 7 — Cài lại Rust toolchain nếu mọi cách đều không hiệu quả

Toolchain bị hỏng — thường do rustup update bị gián đoạn — có thể khiến trình biên dịch mất dấu std, corealloc hoàn toàn. Hiếm gặp, nhưng vẫn xảy ra. Gỡ cài đặt và cài lại sạch sẽ:

rustup toolchain uninstall stable
rustup toolchain install stable
rustup component add rustfmt clippy

Sau đó xóa cache build và bắt đầu lại từ đầu:

cargo clean
cargo build

Xác nhận — kiểm tra bản sửa lỗi đã hoạt động

Chạy clean build và lọc output theo những gì quan trọng:

cargo build 2>&1 | grep -E "error|warning|Compiling"

Một lần build thành công trông như thế này:

   Compiling serde v1.0.210
   Compiling my-project v0.1.0
    Finished dev [unoptimized + debuginfo] target(s) in 3.42s

Không còn dòng error[E0463] nào. Crate đã được tìm thấy và liên kết thành công.

Tham khảo nhanh — nguyên nhân phổ biến và cách khắc phục

  • Crate chưa có trong Cargo.toml → chạy cargo add <crate-name>
  • Viết sai tên crate → kiểm tra trên crates.io, sửa lại chính tả
  • Thiếu features flagcargo add tokio --features full
  • Lock file cũ → chạy cargo fetch hoặc cargo update
  • Sai thành viên workspace → kiểm tra Cargo.toml của từng thành viên
  • Edition không khớp → xóa các dòng extern crate cũ cho edition 2018 trở lên
  • Target no_std → thêm #![no_std] hoặc cài target phù hợp bằng rustup
  • Toolchain bị hỏngrustup toolchain uninstall stable && rustup toolchain install stable

Related Error Notes