Установите PhantomJS 1.6 на Centos 5.8
Я пытаюсь установить PhantomJS v1.6 на свой сервер Centos 5.8. Я сталкиваюсь с следующей ошибкой при попытке запустить phantomjs:
phantomjs: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by phantomjs)
phantomjs: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by phantomjs)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.7' not found (required by phantomjs)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.7' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtGui.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.11' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtGui.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.9' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtGui.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.10' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtNetwork.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.9' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libQtCore.so.4)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.11' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libfreetype.so.6)
phantomjs: /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libc.so.6: version `GLIBC_2.7' not found (required by /usr/phantomjs-1.6.0-linux-x86_64-dynamic/bin/../lib/libfontconfig.so.1)
Некоторые исследования заставляют меня поверить, что это довольно низкоуровневые системные файлы, с которыми я не уверен, что мне следует связываться. Любые идеи, как запустить это на моем сервере?
2 ответа
Относится к: PhantomJS 1.6. И протестировано на Centos 5.6
Вы можете скомпилировать его из исходного кода, и он будет работать как шарм.
./build.sh
После сборки выполните развертывание, которое вы можете запустить в любом месте, где хотите, просто скопируйте и замените файлы там, где появляется эта ошибка.
У меня была та же проблема, я скомпилировал ее из исходного кода и скопировал требуемый файл. (Я предполагаю, что, как я сделал: соблюдается на сервере diff и копировать файлы, но вы всегда можете сделать это на том же сервере)
Загружается в usr/local/src и компилируется. скопировал необходимый файл в исходное место
cp -rP /usr/local/src/phantomjs-1.6.0-linux-x86_64-dynamic/bin/phantomjs* /data/phantomjs/bin/
cp -rP /usr/local/src/phantomjs-1.6.0-linux-x86_64-dynamic/lib/l* /data/phantomjs/lib/
Предупреждение: Компиляция PhantomJS из исходного кода занимает много времени, в основном из-за тысяч файлов в модуле WebKit. С 4 параллельными заданиями на современном компьютере весь процесс занимает около 30 минут. Настоятельно рекомендуется установить готовый двоичный пакет, если он доступен. Linux
Примечание 1: build.sh по умолчанию запускает 4 (четыре) задания параллельной компиляции. При сборке на виртуальной машине / сервере или в другой ограниченной среде уменьшите число заданий, передав число, например./build.sh --jobs 1, чтобы установить только одно задание компиляции за раз.
Он ищет версионные символы в glibc и libstdC++. Версии в библиотеках вашей системы более старые, поэтому они не совпадают, что имеет смысл, поскольку CentOS отслеживает RedHat AdvancedServer, который довольно консервативен в отношении нового программного обеспечения.
Вы можете проверить символы в вашем libstdC++ следующим образом:
nm -D /usr/lib64/libstdc++.so.6 | grep GLIBC
nm
создает дамп именованных символов, -D для динамических библиотек и grep для ваших имен
Хм, это симпатичные ядра. libstdC++ используется любым приложением, которое использует C++ в вашей ОС. glibc используется практически всем. Вы, вероятно, не хотите обновлять их на месте, и даже если бы вы это сделали, вы, вероятно, потеряете свои обновления при следующем обновлении системы.
У меня была похожая проблема с Firefox, вы можете справиться с этим следующим образом:
- Найдите репозиторий Fedora RPM. Этот сайт кажется полезным.
- Выберите версию. Не беспокойтесь о том, какой из них; если не получится, попробуем еще раз
- Найдите RPM libc и libstdC++ x86_64 для выбранной вами версии. Загрузить.
- Перейдите в каталог tmp и распакуйте его:
rpm2cpio libstdc++WHATEVER.rpm | cpio -iv --make-directories
- создайте другой каталог, этот должен остаться немного. Найдите место в /usr/local или в вашем домашнем каталоге. Я бы сказал, может быть, $HOME/lib/lib64 просто чтобы дать ему имя. Замените имя при необходимости.
mkdir $HOME/lib/lib64
- Найдите файл libstdC++. So.6 и скопируйте его в $HOME/lib/lib64.
Теперь у вас есть нужная вам библиотека в $HOME/lib/lib64 (или где бы вы ее ни вставляли). Теперь, когда вы запускаете свое приложение, вы должны указать ему, как искать новую библиотеку.
LD_LIBRARY_PATH=$HOME/lib/lib64:$LD_LIBRARY_PATH appThatNeedsNewLib arg1 arg2
Будьте готовы сделать это несколько раз - когда я сделал это, получая правильную версию libstdC++, я обнаружил и другие старые файлы, к которым мне также нужно было загружать обновления.