Вопрос или проблема
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
. Эта ошибка может быть вызвана отсутствием либо перепутанным поисковым путём библиотек. Давайте разберёмся, как можно решить эту проблему.
Природа проблемы
-
Подключение библиотек: При компиляции C++ кода, большинство компиляторов ожидает найти стандартные библиотеки, такие как
libstdc++
. Параметр-lstdc++
указывает линковщику использовать именно эту библиотеку. -
Использование
lld
: Линковщикlld
является альтернативой стандартному линковщикуld
. Однако, не все системы могут корректно переключаться на использованиеlld
без дополнительной конфигурации.
Шаги по устранению ошибки
-
Проверьте наличие библиотеки
libstdc++
:
Убедитесь, что пакет с библиотеками стандартного C++ установлен на вашей системе. Вы можете проверить это с помощью следующей команды в терминале:dpkg -l | grep libstdc++
Если пакет не установлен, его можно установить командой:
sudo apt-get install libstdc++-<version>-dev
Обратите внимание, что
<version>
замените необходимой версией, соответствующей вашей системе. -
Перепроверка конфигурации линковщика:
Если библиотека установлена, возможно, чтоlld
не может найтиlibstdc++
. Для решения этого можно настроить альтернативу для линковщика:sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.lld 100
Эта команда задаёт
ld
как стандартный линковщик, который ссылается наld.lld
. -
Обновление компилятора и линковщика:
Проверьте актуальность вашего компилятора и линковщика. Используйте:clang++ --version ld.lld --version
Если они устарели, обновите пакеты в вашей системе:
sudo apt-get update sudo apt-get upgrade
-
Проверка переменных окружения:
Убедитесь, что переменные окружения PATH и LIBRARY_PATH корректно настроены и указывают на каталоги, где располагаются ваши библиотеки. Попробуйте добавить пути к библиотекам:export LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/<version>:$LIBRARY_PATH
Замените
<version>
на соответствующую версию вашего компилятора. -
Проверка конфигурации CMake:
Если вы используете CMake, убедитесь, что он находит нужные компиляторы и библиотеки. Возможно, стоит указать их явно в вашем CMakeLists.txt:set(CMAKE_CXX_COMPILER "/usr/bin/clang++")
-
Тестирование с другими библиотеками:
Для дальнейшего выяснения проблемы можно провести тест с другой библиотекой. Попробуйте скомпилировать простой C++ код без использованияlld
:/usr/bin/clang++ -o prog prog.cpp
Заключение
Ошибка ld.lld: error: unable to find library -lstdc++
может быть решена несколькими способами в зависимости от вашей конфигурации системы. Убедитесь, что все необходимые компоненты установлены и правильно настроены. Соблюдение предложенных шагов обязательно позволит устранить проблему и скомпилировать ваш C++ код.