Установить версию node-v18 на centos7 действительно сложно.
Установить версию node-v18 на centos7 действительно сложно.

фон

фон – это то, о чем говорилось в предыдущей статье,Если вы развернете центр документов gitbook,Сначала вам нужно установить узел,Затем,Если версия вашего узла слишком высока,Обычно сообщается об ошибке,в это время,Многие статьи в Интернете решают проблему путем понижения версии узла.,Но на самом деле есть способ использовать более высокую версию,Просто немного хлопотно,Код необходимо изменить, но;,Когда я загрузил более новую версию узла и установил ее,Обнаружил, что существующий centos7 все еще не может быть установлен.,Можно сказать, что одна волна следует за другой.

Версия nodejs, сообщившая об ошибке: v18, конкретная здесь — node-v18.18.2-linux-x64.tar.xz.

Версия сервера — centos 7.6, centos 7.9 (пробовал обе)

Вы можете рассмотреть следующий вопрос:

https://stackoverflow.com/questions/72571235/can-i-install-node-js-18-on-centos-7-and-do-i-need-python-3-install-too#:~:text=Starting%20v18%2C%20Node.,due%20to%20glibc%20version%20incompatibility.

image-20231024213204595

https://github.com/nodejs/node/issues/43246

Все еще было довольно шумно. Что, на мой взгляд, также немного сбивает с толку, так это то, что при загрузке в документе нет подсказки, например, доступен ли он на centos7. После того, как он был загружен и возникло множество проблем, я обнаружил, что версия несовместима. Я искал в Интернете.

Подробнее об этом вопросе поговорим ниже.

Анализ причин проблемы

Язык кода:javascript
копировать
tar -xvf node-v18.18.2-linux-x64.tar.xz 
cd node-v18.18.2-linux-x64/

[root@VM-0-6-centos node-v18.18.2-linux-x64]# bin/node 
bin/node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by bin/node)
bin/node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by bin/node)
bin/node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by bin/node)
bin/node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by bin/node)
bin/node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by bin/node)
bin/node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by bin/node)

Вот что означает эта ошибка.Когда узел выполняется, это зависит от некоторых динамических библиотек, от которых это зависит:

Язык кода:javascript
копировать
[root@VM-0-6-centos node-v18.18.2-linux-x64]# ldd bin/node 
        linux-vdso.so.1 =>  (0x00007fff34927000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fd57af20000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fd57ac19000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fd57a917000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd57a701000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd57a4e5000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fd57a117000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd57b124000)

существовать => Левая часть этого символа,Это имя зависимой динамической библиотеки.,правая сторона,Просто исходя из этого имени,Поиск по пути, указанному в переменной среды существования LD_LIBRARY_PATH.,Полный путь к динамической библиотеке наконец-то разрешен.

Затем давайте посмотрим на первую строку ошибки:

Язык кода:javascript
копировать
[root@VM-0-6-centos node-v18.18.2-linux-x64]# bin/node 
bin/node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by bin/node)

/lib64/libm.so.6Это полный путь,Похоже нашел,Но все равно сообщил об ошибке,Кажется, я хочусуществоватьGLIBC_2.27Эта версия не найдена。

мы можем сделать это,существоватьосуществлятьlddВедите подробный журнал:

Язык кода:javascript
копировать
[root@VM-0-6-centos]# ldd -v bin/node 
Version information:
        bin/node:
                ...
                libm.so.6 (GLIBC_2.27) => not found
                libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6

Такое впечатление, что ищет libm.so.6 (GLIBC_2.27) но не нашел, а нашел libm.so.6 (GLIBC_2.2.5).

На самом деле это так. То, что ядро ​​предоставляет пользователям, — это системный вызов (system). call),но,существовать, когда мы пишем код языка C,Обычно эти системные вызовы не вызываются напрямую.,Вместо этого будут включены некоторые заголовочные файлы.,нравитьсяinclude <stdio.h>,Эти заголовочные файлы являются интерфейсами,Эти интерфейсы включают в себя их реализацию,Наконец, компилировать стал двойным и стал библиотекой.,Для использования пользователями. Самая ранняя — стандартная библиотека libc.,Позже его постепенно заменили на glibc.,glibc — библиотека libc, выпущенная GNU.,Официальный сайт: https://www.gnu.org/software/libc/libc.html.

Эта библиотека glibc,Например, на моем centos7.6,Где находится существование?

Сначала я проверил, что локальная версия glibc — 2.17:

Язык кода:javascript
копировать
https://lindevs.com/check-glibc-version-in-linux
Метод 1:
[root@VM-0-6-centos lib64]# ldd --version
ldd (GNU libc) 2.17

Метод 2:
[root@VM-0-6-centos lib64]# ldd `which cat` | grep libc
        libc.so.6 => /lib64/libc.so.6 (0x00007f27331c8000)
[root@VM-0-6-centos lib64]# /lib64/libc.so.6
GNU C Library (GNU libc) stable release version 2.17, by Roland McGrath et al.

В Glibc обычно есть пакеты rpm. Я нашел версию 2.17 пакета glibc x86-64 на этом сайте:

https://rpmfind.net/linux/RPM/centos/updates/7.9.2009/x86_64/Packages/glibc-2.17-326.el7_9.x86_64.html

Как видите, на самом деле он содержит множество файлов, включая /lib64/libm.so.6:

image-20231025220044115

Итак, что я на самом деле имею в виду,/lib64/libm.so.6то естьglibcчасть,Тогда эта версия glibc 2.17,включено/lib64/libm.so.6Что означает эта ошибка??

Язык кода:javascript
копировать
[root@VM-0-6-centos]# ldd -v bin/node 
Version information:
        bin/node:
                ...
                libm.so.6 (GLIBC_2.27) => not found
                libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6

Я нашел отличный ответ:

https://unix.stackexchange.com/questions/458659/what-do-the-multiple-glibc-versions-mean-in-the-output-of-ldd

“GLIBC_..., GLIBCXX_... etc. are version symbols, which are used in some libraries (including the GNU C library and the GCC libraries) to identify required versions and to manage backward compatibility. A binary (executable or library) will usually end up requiring multiple versions, based on the symbols it really uses from the target library. To satisfy the requirements of a given binary, you need to provide a library which supports all the required versions — i.e. a library matching at least the highest version symbol in the list of requirements. ”

Переведено,GLIBC_...ждатьGLIBCXX_...это символ версии,существоватьнекоторые библиотеки(включатьGNU библиотека C и библиотека GCC) для определения необходимых версий и управления обратной совместимостью. Двоичному файлу (исполняемому файлу или библиотеке) часто требуется несколько версий, в зависимости от того, какие символы из целевой библиотеки он фактически использует. Чтобы удовлетворить требования данного двоичного файла, вам необходимо предоставить библиотеку, поддерживающую все необходимые версии. -Прямо сейчасБиблиотека, соответствующая как минимум самому старшему символу версии в списке требований.。

“The reason multiple versions can end up being required, is that each imported object (function etc.) can have a version, and a given binary can link against multiple versions across all the functions it uses. ”

Перевод: Причина, по которой вам может понадобиться несколько версий, заключается в том, что каждый импортированный объект (функция и т. д.) может иметь версию, а данный двоичный файл может быть связан с несколькими версиями всех используемых им функций.

Я взял здесь только часть.,Вам следует прочитать оригинальный текст,Во всяком случае, вот что это значит,Например, программный узел,этото естьбудет использоваться/lib64/libm.so.6Разные внутриversion symbolизфункция,что тебе нужно сделать,Просто удовлетвори это,в противном случае,Сообщает об ошибке.

Как его удовлетворить?,то есть Пучок/lib64/libm.so.6из Обновление версии,пока не содержитGLIBC_2.27этотversion symbol。

Как я могу получить повышение?/lib64/libm.so.6Поднимаемся,Тогда, поскольку это часть glibc,Естественно, вы можете обновить glibc только целиком до указанной версии.,СравниватьнравитьсяздесьизGLIBC_2.27

Решение — обновить GLIBC

Ссылка на статью здесь:

https://mp.weixin.qq.com/s/Xhm_BmMH2EoVWMPRWfCnaw

Встретимсяиз Почти ловушка。в статье1. Установите компилированную среду devtoolset-8.В этой части не должно быть ничего особенного.сосредоточиться на,Я не думаю, что нужно что-то делать.,Из-за этого ленивого способа установки gcc,Это не может решить проблему ошибок установки узла.,Просто посмотрите ниже, чтобы узнать.

Начать обновление glibc,Стоит отметить, что,Это лучше для всехвиртуальная машина, личный облачный хост, чтобы играть в первую очередь, не используйте для этого среду, используемую другими людьми, машину легко полностью повредить до бесконечности, также не забудьте сделать резервную копию перед игрой, например, сначала скопировать; виртуальная машинауйди

Язык кода:javascript
копировать
Если он работает медленно, вы можете вручную загрузить и загрузить его самостоятельно.
wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz --no-check-certificate

tar -xzvf glibc-2.28.tar.gz

cd glibc-2.28

mkdir build && cd build (Обязательно создайте отдельную папку для сборки)

существоватькомпилировать Прежде чем начать,Исправлять scripts/test-installation.pl Добавлена ​​строка 128. && $name ne "nss_test2" чтобы избежать ошибок компиляции nss_test2 сообщает об ошибке. В любом случае, просто добавьте строку.

Следующий,Это команда настройки,Обратите особое внимание на добавление --enable-obsolete-nsl.,решатьundefined reference to '_nsl_default_nss@GLIBC_PRIVATE' , в его статье можно использовать и другие варианты, но у меня команда потерялась (виртуальная машина позже была повреждена другими вещами)

Язык кода:javascript
копировать
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --enable-obsolete-nsl

Тогда есть:

Язык кода:javascript
копировать
make или make -j4 (4 потока выполняются одновременно)

Помню, у меня это заняло где-то полчаса-час, я забыл, это была еще виртуальная. Машина Такая плохая производительность
make install

Проверьте версию внутри symbol:
strings /lib64/libc.so.6 | grep GLIBC

Решите проблемы с gcc – обновите gcc

После решения вышеуказанной проблемы я продолжаю выполнять узел, но сообщение об ошибке по-прежнему выдается следующим образом:

Язык кода:javascript
копировать
bin/node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by bin/node)
bin/node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by bin/node)
bin/node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by bin/node)
Язык кода:javascript
копировать
Посмотрите на символы внутри этого версия, последняя — 1.3.7, которая не соответствует требованиям 1.3.9:
[root@VM-0-6-centos node-v18.18.2-linux-x64]# strings /lib64/libstdc++.so.6 |grep CXXABI_
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7

Последней является 3.4.19, которая не соответствует требованиям 3.4.20 и 3.4.21:
[root@VM-0-6-centos node-v18.18.2-linux-x64]# strings /lib64/libstdc++.so.6 |grep GLIBCXX
...
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19

Согласно официальной документации:

https://gcc.gnu.org/wiki/InstallingGCC

Перед установкой gcc вам необходимо сначала установить зависимую версию gmp-devel mpfr-devel libmpc-devel. Во многих статьях говорится об установке yum. Я думаю, что это нормально, но боюсь, что версия gcc не соответствует зависимым версиям, установленным. ням. Я предлагаю Или установить его следующим образом:

Язык кода:javascript
копировать
wget https://ftp.gnu.org/gnu/gcc/gcc-8.5.0/gcc-8.5.0.tar.gz --no-check-certificate

cd gcc-8.5.0
./contrib/download_prerequisites

На этом этапе будет загружен соответствующий исходный код, для которого требуется Интернет:

Язык кода:javascript
копировать
[root@VM-0-6-centos gcc-8.5.0]# ./contrib/download_prerequisites
2023-10-22 15:40:49 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2023-10-22 15:42:05 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2023-10-22 15:42:42 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925] -> "./mpc-1.0.3.tar.gz" [1]
2023-10-22 15:44:31 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: OK
mpfr-3.1.4.tar.bz2: OK
mpc-1.0.3.tar.gz: OK
isl-0.18.tar.bz2: OK
All prerequisites downloaded successfully.

После загрузки несколько пакетов tar сохраняются в текущем каталоге.

Язык кода:javascript
копировать
mkdir build
cd build/

Мне не нужен gcc для поддержки компилированияgo. При необходимости вы можете добавить его.
../configure --disable-multilib --enable-languages=c,c++ --prefix=$HOME/local

Следующий шаг — make. Сначала я пытался сделать это быстрее, но у меня получилось:
nohup make -j4 2>&1 &
В результате после долгого ожидания выдали сообщение об ошибке. . . С намерением попробовать, я изменил его, чтобы сделать, и это сработало.
nohup make  2>&1 &
tailf nohup.out 

make install
export LD_LIBRARY_PATH=$HOME/local/lib64

Выполнение этого make здесь занимает много времени. В любом случае, мой облачный хост такой: 1 ядро, 2g, процессор всегда на 100%, и он работал 2 с половиной часа:

image-20231025225356657

С 4:20:

image-20231025225415970

Сейчас 6:40:

image-20231025225433610

После этого вы сможете снова использовать узел, и проблем быть не должно. Эй, вы сказали, что документы вашего официального веб-сайта не могут напомнить мне, какая последняя версия поддерживает Centos7. На полпути сообщается об ошибке, а затем одна версия понижается одна за другой, пока в интернет-сообществе не будет сообщено об ошибках. также полно жалоб, я убежден.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose