Avatar ·

Ошибка "linker 'cc' not found" в Rust на Debian под Windows 10: как исправить?

Привет! Я начинаю изучать Rust и столкнулся с проблемой при попытке скомпилировать свой первый проект. У меня Windows 10, но я работаю в подсистеме Linux (WSL) с Debian. Я установил Rust через rustup, всё прошло успешно. Однако, когда я пытаюсь скомпилировать простейшую программу, я получаю ошибку. Вот мой код (файл main.rs): ```rust fn main() { println!("Hello, world!"); } ``` Я запускаю `rustc main.rs` и получаю следующее сообщение: ``` error: linker `cc` not found | = note: No such file or directory (os error 2) ``` Я погуглил и понял, что проблема связана с отсутствием линковщика (linker). Но я не уверен, что именно нужно установить и как это сделать правильно. Я пробовал `sudo apt install gcc`, но это не помогло — ошибка осталась. Может, я что-то делаю не так? Нужно ли устанавливать какие-то дополнительные пакеты? В официальной документации сказано про "build-essential", но я не знаю, подходит ли это для моей ситуации. Подскажите, пожалуйста, как решить эту проблему шаг за шагом. <<>>

Причина ошибки и её решение

Ошибка linker 'cc' not found возникает, когда компилятор Rust (rustc) не может найти линковщик — программу, которая собирает объектные файлы в исполняемый бинарник. В Linux по умолчанию используется cc (символическая ссылка на GCC или Clang). В вашем случае, хотя вы установили GCC через sudo apt install gcc, возможно, пакет был установлен не полностью, или отсутствуют необходимые зависимости. Для Rust в Debian/Ubuntu рекомендуется устанавливать мета-пакет build-essential, который включает GCC, make и другие инструменты сборки.

Пошаговое решение

  1. Установите build-essential:
    sudo apt update
    sudo apt install build-essential -y
    Этот пакет гарантированно установит GCC и создаст символьную ссылку cc.
  2. Проверьте установку:
    which cc
    # Должно показать: /usr/bin/cc
    cc --version
    # Должна появиться информация о версии GCC
    Если команда cc не найдена, проверьте, что пакет установлен корректно.
  3. Проверьте переменную окружения CC:
    echo $CC
    # Если пусто — всё в порядке, rustc сам найдёт cc
    Если переменная CC установлена в неверное значение, сбросьте её:
    unset CC
  4. Скомпилируйте ваш проект снова:
    rustc main.rs
    ./main
    # Должно вывести: Hello, world!

Если ошибка осталась

Иногда проблема может быть в том, что rustc использует нестандартный линковщик. Вы можете явно указать путь к GCC:

rustc -C linker=gcc main.rs

Или для постоянного использования добавьте в файл ~/.cargo/config.toml:

[target.x86_64-unknown-linux-gnu]
linker = "gcc"

Дополнительная рекомендация

Если вы используете Cargo (рекомендуемый способ работы с Rust), ошибка может проявляться при cargo build. Решение то же самое — установите build-essential. Cargo автоматически найдёт линковщик после установки пакета.

Важно: В WSL (Windows Subsystem for Linux) убедитесь, что вы используете дистрибутив Debian (или Ubuntu) из Microsoft Store, а не какую-то стороннюю сборку. Иногда в WSL могут отсутствовать базовые пакеты, поэтому выполните полное обновление системы:

sudo apt update && sudo apt upgrade -y

После этого установка build-essential решит проблему в 99% случаев.

<<>>

Альтернативный подход: установка Clang вместо GCC

Если по каким-то причинам установка build-essential не помогла или вы предпочитаете использовать Clang в качестве линковщика, выполните:

sudo apt install clang -y

После установки проверьте, что cc теперь указывает на Clang:

ls -la /usr/bin/cc
# Если ссылка отсутствует, создайте её вручную:
sudo ln -s /usr/bin/clang /usr/bin/cc

Затем попробуйте скомпилировать проект снова. Clang часто используется в Rust-сообществе из-за лучшей интеграции с LLVM (который лежит в основе rustc).

Ручная установка линковщика через rustup

Если системные пакеты не подходят (например, из-за ограничений WSL), можно установить линковщик через менеджер пакетов Rust:

rustup component add rust-src
cargo install cargo-binutils
rustup component add llvm-tools-preview

После этого используйте rust-lld как линковщик:

rustc -C linker=rust-lld main.rs

Этот способ полностью автономен и не требует системных пакетов, но может работать медленнее на больших проектах.