Ошибка "linker 'cc' not found" при компиляции Rust на Debian в WSL на Windows 10
Причина ошибки
Ошибка linker 'cc' not found возникает, потому что компилятор Rust (rustc) не может найти системный линкер, который отвечает за сборку итогового исполняемого файла из объектных файлов. В Linux по умолчанию используется линкер из пакета GCC (обычно это cc или gcc). В WSL (Debian) эта утилита отсутствует, если не установлены инструменты для разработки.
Ваша попытка установить build-essential — правильная, но возможно, что-то пошло не так. Давайте разберём пошаговое решение.
Шаг 1. Полная установка build-essential
Выполните в терминале WSL (Debian):
sudo apt update
sudo apt upgrade -y
sudo apt install build-essential -y
Пакет build-essential включает в себя GCC, G++, make и, самое главное, линкер ld и симлинк cc → gcc.
После установки проверьте, что линкер доступен:
which cc
# Должно вывести: /usr/bin/cc
Если команда cc не найдена, проверьте gcc:
gcc --version
Если GCC установлен, но cc отсутствует, создайте симлинк вручную:
sudo ln -s /usr/bin/gcc /usr/bin/cc
Шаг 2. Проверка переменной PATH
Убедитесь, что /usr/bin находится в вашем PATH. Выполните:
echo $PATH
Если /usr/bin отсутствует, добавьте его в ~/.bashrc:
echo 'export PATH="/usr/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Шаг 3. Альтернатива — использование LLD (LLVM линкер)
Если по каким-то причинам GCC не подходит (например, вы хотите более быстрый линкер), установите lld:
sudo apt install lld -y
Затем настройте Rust использовать его:
# Временная настройка для одной компиляции
RUSTFLAGS="-C link-arg=-fuse-ld=lld" cargo build
# Постоянная настройка через ~/.cargo/config.toml
mkdir -p ~/.cargo
cat >> ~/.cargo/config.toml << EOF
[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "link-arg=-fuse-ld=lld"]
EOF
Шаг 4. Проверка после исправления
Теперь создайте новый проект и скомпилируйте его:
cargo new hello_world
cd hello_world
cargo build
Если всё прошло успешно, вы увидите:
Compiling hello_world v0.1.0 (/home/user/hello_world)
Finished dev [unoptimized + debuginfo] target(s) in 0.5s
Дополнительные советы для WSL
- Не смешивайте Windows и WSL инструменты: Rust, установленный в WSL, должен использовать линкеры из WSL, а не из Windows. Убедитесь, что в вашем PATH нет путей к Windows-программам, которые могут конфликтовать.
- Если вы используете VS Code: откройте терминал внутри WSL (команда
wslв терминале VS Code или расширение Remote - WSL). - Обновите Rust:
rustup update— иногда старые версии rustc имеют проблемы с поиском линкера.
После этих шагов ошибка linker 'cc' not found должна исчезнуть. Если проблема остаётся, проверьте логи компиляции с флагом -v:
rustc -v main.rs 2>&1 | grep linker
Это покажет, какой именно линкер пытается вызвать rustc.
<<Использование musl-tools как альтернативы
Если вы не хотите устанавливать весь GCC (он довольно тяжёлый), можно использовать статический линкер musl. Это особенно полезно, если вы собираетесь создавать статически скомпонованные бинарники для Linux.
Установите musl-tools:
sudo apt update
sudo apt install musl-tools -y
Теперь настройте Rust использовать musl-линкер. Добавьте в ~/.cargo/config.toml:
[target.x86_64-unknown-linux-musl]
linker = "musl-gcc"
При компиляции указывайте этот таргет:
cargo build --target x86_64-unknown-linux-musl
Преимущества этого подхода:
- Меньший размер устанавливаемых пакетов (~10 MB вместо ~150 MB для build-essential).
- Получаете статически скомпонованный бинарник, который можно запускать на любом Linux без зависимостей.
- Не нужно создавать симлинк
cc— musl-gcc сам является линкером.
Недостаток: статическая линковка может увеличить размер итогового файла, но для простых программ это не критично. Если вы работаете с большими проектами, лучше вернуться к стандартному GCC.
Ответов пока нет.
Войдите чтобы оставить ответ