Вопрос или проблема
Предыстория
Я перешел с прямой установки nodejs на установку nodejs через nvs (как рекомендовано). Я удалил nodejs и nvm и обновил свою систему.
Моя система — Raspberry Pi 3B с установленной Raspbian (Debian v10 / Buster).
Подготовка
Удалил nodejs: sudo apt-get purge nodejs
Удалил nvm и npm: rm -rf $NVM_DIR ~/.npm ~/.bower
Обновил систему: sudo apt update
и sudo apt upgrade
Установка
Затем я установил nvm (как рекомендовано) …
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
… и – после открытия нового окна командной строки – последнюю версию (v21.6.2) nodejs: nvm install node
Ошибка
Когда я запускаю nodejs, происходит следующая ошибка: node -v
node: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version 'GLIBCXX_3.4.26' not found (required by node)
Я искал в интернете более часа без успеха. Любой совет будет высоко оценен.
Решение
Проблема заключалась в том, что я пытался установить NVM в системный каталог. Важно: не устанавливайте NPM с правами администратора (sudo).
Вместо этого NVM должен использоваться как менеджер версий node для установки Node.js и npm. Nodejs должен быть установлен в каталоге usr с использованием NVM.
Следующие команды сработали для меня:
- Скачайте NVM в ваш пользовательский каталог:
pi@raspberrypi:~ $ wget -qO- https://raw.githubusercontent.com/xtuple/nvm/master/install.sh | sudo bash
- Установите NVM:
pi@raspberrypi:~ $ sudo nvm install 19
Следующая команда должна показать /usr/local/nvm
в качестве результата:
pi@raspberrypi:~ $ echo $NVM_DIR
- Далее вы можете установить необходимые вам node_modules, например
pi@raspberrypi:/ $ sudo npm install -g --save bluebird
pi@raspberrypi:/ $ sudo npm install -g peer-ssdp
pi@raspberrypi:/ $ sudo npm install -g music-metadata
pi@raspberrypi:/ $ sudo npm install -g netgear
pi@raspberrypi:/ $ sudo npm install -g utf8
pi@raspberrypi:/ $ sudo npm install -g pigpio
Модули node_modules теперь должны быть установлены в /usr/local/nvm/v19.9.0/lib/node_modules
.
Извините за плохую документацию. Мне потребовались часы на устранение неполадок, и я был так рад, что это сработало для меня, что забыл сразу записать решение здесь. Надеюсь, это все равно поможет.
Если вам не нравится описание, пожалуйста, оставьте мне комментарий вместо того, чтобы снижать рейтинг решения. Это даст мне возможность улучшить ответ, если потребуется. Спасибо!
Ответ или решение
Теория
Ошибка, с которой вы столкнулись, связана с библиотекой GNU C++ Standard Library (libstdc++). Версия GLIBCXX_3.4.26, которую требует Node.js, не найдена в вашей системе. Эта проблема часто возникает на системах с более старым дистрибутивом, таким как Raspbian Buster, где установлены более старые пакеты, в то время как новые версии программного обеспечения, такие как Node.js, могут требовать более новые версии библиотек.
В контексте Node.js и менеджера версий nvm, важно понимать, что nvm позволяет устанавливать разные версии Node.js для пользователя без необходимости изменения системных библиотек. Однако даже при использовании nvm, Node.js будет полагаться на системные библиотеки, такие как libstdc++, которые могут не соответствовать требованиям последних версий Node.js.
Пример
После установки Node.js с помощью nvm на Raspberry Pi 3B с системой Raspbian Buster, возникает ошибка: version 'GLIBCXX_3.4.26' not found
. Это связанно с тем, что системная библиотека libstdc++.so.6 не поддерживает требуемую версию GLIBCXX. Ваша текущая система может не иметь этой версии библиотеки, что и вызывает ошибку.
Применение
Чтобы устранить эту проблему, можно предпринять несколько действий:
-
Обновление системной библиотеки libstdc++:
- Самый надежный способ — обновить вашу операционную систему до более новой версии (например, Debian Bullseye или более поздней), которая содержит требуемые библиотеки или обновить текущие пакеты libstdc++.
- Один из вариантов обновления библиотеки libstdc++ — использовать репозитории Debian Testing/Unstable. Однако этот метод может нести риск нестабильной работы системы.
-
Использование более старой версии Node.js:
- Если обновление системы невозможно, безопасным решением будет установка более старой версии Node.js, которая совместима с текущими версиями ваших системных библиотек.
- С помощью nvm можно легко переключиться на более старую версию Node.js, командой:
nvm install <версия>
. Например,nvm install 14
может помочь, так как более старые версии Node.js имеют меньше требований к системным библиотекам.
-
Компиляция собственных библиотек:
- В крайнем случае можно попробовать самостоятельно скомпилировать более новую версию libstdc++ из исходников, однако это достаточно сложный и рискованный процесс, который может потребовать значительных усилий и конфликта зависимости пакетов.
-
Удаление и переустановка nvm без sudo:
- Убедитесь, что nvm установлен и используется в обычной пользовательской среде, а не с правами администратора. Удалите nvm, если он был установлен с sudo, чтобы избежать ошибок, связанных с правами доступа и каталогами.
Рекомендации по установке nvm и Node.js:
-
Удалите старые версии Node.js и nvm:
sudo apt-get purge nodejs rm -rf $NVM_DIR ~/.npm ~/.bower
-
Установите nvm для вашего пользователя:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
-
Установите совместимую версию Node.js, например:
nvm install 14
-
Убедитесь, что Node.js и npm работают корректно:
node -v npm -v
Решение может включать в себя множество проб и ошибок в зависимости от конфигурации вашей системы, поэтому настоятельно рекомендуется быть осторожным при выполнении обновлений и конфигураций на вашей Raspberry Pi. Убедитесь в наличии резервных копий важных данных перед внесением серьезных изменений в систему.