ld.lld: ошибка: не удалось найти библиотеку -lstdc++

Вопрос или проблема

CMake жалуется, что у меня нет работающего компилятора C++ из-за ошибки:

ld.lld: ошибка: невозможно найти библиотеку -lstdc++

Я narrowed it down до следующего:

  • Дана программа int main(){return 0;}
  • И команды
/usr/bin/clang++ -std=gnu++17 -MD -MT prog.o -MF prog.d -o prog.o -c prog.cpp
/usr/bin/clang++ -fuse-ld=lld prog.o -o prog

Вторая команда завершается с указанной ошибкой. Как я могу исправить установку C++ в Ubuntu, чтобы это заработало?

П похоже, что есть проблема с конфигурацией вашей среды C++, вы могли бы попробовать решить вашу проблему с компоновщиком, обновить вашего компоновщика и компилятор и проверить их версии. Если это не сработает, вы можете обновить вашего альтернативного компоновщика sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.lld 100
Эта команда установит ld для использования ld.lld в качестве компоновщика по умолчанию. Попробуйте перекомпилировать после этого. Это, вероятно, поможет.

Ответ или решение

Ошибка ld.lld: error: unable to find library -lstdc++ указывает на проблему с нахождением библиотеки стандартного C++, когда вы пытаетесь скомпилировать программный код с использованием компилятора clang++ и линковщика lld. Эта ошибка может быть вызвана отсутствием либо перепутанным поисковым путём библиотек. Давайте разберёмся, как можно решить эту проблему.

Природа проблемы

  1. Подключение библиотек: При компиляции C++ кода, большинство компиляторов ожидает найти стандартные библиотеки, такие как libstdc++. Параметр -lstdc++ указывает линковщику использовать именно эту библиотеку.

  2. Использование lld: Линковщик lld является альтернативой стандартному линковщику ld. Однако, не все системы могут корректно переключаться на использование lld без дополнительной конфигурации.

Шаги по устранению ошибки

  1. Проверьте наличие библиотеки libstdc++:
    Убедитесь, что пакет с библиотеками стандартного C++ установлен на вашей системе. Вы можете проверить это с помощью следующей команды в терминале:

    dpkg -l | grep libstdc++

    Если пакет не установлен, его можно установить командой:

    sudo apt-get install libstdc++-<version>-dev

    Обратите внимание, что <version> замените необходимой версией, соответствующей вашей системе.

  2. Перепроверка конфигурации линковщика:
    Если библиотека установлена, возможно, что lld не может найти libstdc++. Для решения этого можно настроить альтернативу для линковщика:

    sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.lld 100

    Эта команда задаёт ld как стандартный линковщик, который ссылается на ld.lld.

  3. Обновление компилятора и линковщика:
    Проверьте актуальность вашего компилятора и линковщика. Используйте:

    clang++ --version
    ld.lld --version

    Если они устарели, обновите пакеты в вашей системе:

    sudo apt-get update
    sudo apt-get upgrade
  4. Проверка переменных окружения:
    Убедитесь, что переменные окружения PATH и LIBRARY_PATH корректно настроены и указывают на каталоги, где располагаются ваши библиотеки. Попробуйте добавить пути к библиотекам:

    export LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/<version>:$LIBRARY_PATH

    Замените <version> на соответствующую версию вашего компилятора.

  5. Проверка конфигурации CMake:
    Если вы используете CMake, убедитесь, что он находит нужные компиляторы и библиотеки. Возможно, стоит указать их явно в вашем CMakeLists.txt:

    set(CMAKE_CXX_COMPILER "/usr/bin/clang++")
  6. Тестирование с другими библиотеками:
    Для дальнейшего выяснения проблемы можно провести тест с другой библиотекой. Попробуйте скомпилировать простой C++ код без использования lld:

    /usr/bin/clang++ -o prog prog.cpp

Заключение

Ошибка ld.lld: error: unable to find library -lstdc++ может быть решена несколькими способами в зависимости от вашей конфигурации системы. Убедитесь, что все необходимые компоненты установлены и правильно настроены. Соблюдение предложенных шагов обязательно позволит устранить проблему и скомпилировать ваш C++ код.

Оцените материал
Добавить комментарий

Капча загружается...