2

Я пытаюсь установить 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 ответа2

3

Относится к: 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, чтобы установить только одно задание компиляции за раз.

3

Он ищет версионные символы в 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++, я обнаружил и другие старые файлы, к которым мне также нужно было загружать обновления.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .