
Estoy intentando instalar PhantomJS v1.6 en mi servidor Centos 5.8. Me encuentro con el siguiente error al intentar ejecutar 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)
Algunas investigaciones me llevan a creer que estos son archivos de sistema de nivel bastante bajo con los que no estoy seguro de deber tocar. ¿Alguna idea de cómo hacer que esto se ejecute en mi servidor?
Respuesta1
Está buscando símbolos versionados en glibc y libstdc++. Las versiones de las bibliotecas de su sistema son más antiguas, por lo que no coinciden, lo cual tiene sentido, ya que CentOS rastrea RedHat AdvancedServer, que es bastante conservador cuando se trata de software nuevo.
Puedes verificar los símbolos en tu libstdc++ de esta manera:
nm -D /usr/lib64/libstdc++.so.6 | grep GLIBC
nm
vuelca símbolos con nombre, -D para bibliotecas dinámicas y grep para sus nombres
Hmm, estas son bibliotecas bastante básicas. libstdc++ lo utiliza cualquier aplicación que utilice C++ en su sistema operativo. glibc es usado por casi todo. Probablemente no quieras actualizarlos en el lugar, e incluso si lo hicieras, probablemente perderías tus actualizaciones en la próxima actualización del sistema.
Tuve un problema similar con Firefox, puedes solucionarlo de esta manera:
- Encuentre un repositorio RPM de Fedora.Este sitio Parece útil.
- Elige una versión. No te preocupes demasiado por cuál; si no funciona lo intentaremos de nuevo
- Busque los RPM libc y libstdc++ x86_64 para la versión que eligió. Descargalo.
- Vaya a un directorio tmp y descomprímalo:
rpm2cpio libstdc++WHATEVER.rpm | cpio -iv --make-directories
- cree otro directorio, este debe permanecer un poco ahí. Busque un lugar en /usr/local o en el directorio de su casa. Yo diría, tal vez, $HOME/lib/lib64 sólo para darle un nombre. Reemplace el nombre según sea necesario.
mkdir $HOME/lib/lib64
- Busque el archivo libstdc++.so.6 y cópielo en $HOME/lib/lib64.
Ahora tiene la biblioteca que necesita en $HOME/lib/lib64 (o donde la haya colocado). Ahora, cuando ejecute su aplicación, debe indicarle cómo buscar la nueva biblioteca.
LD_LIBRARY_PATH=$HOME/lib/lib64:$LD_LIBRARY_PATH appThatNeedsNewLib arg1 arg2
Esté preparado para hacer esto varias veces: cuando lo hice, obtener la versión correcta de libstdc++ expuso otros archivos antiguos a los que también necesitaba descargar actualizaciones.
Respuesta2
Se aplica a: PhantomJS 1.6. Y probado en Centos 5.6
Puedes compilarlo desde la fuente y funcionará de maravilla.
./build.sh
Después de compilar, implemente, que puede ejecutar en cualquier lugar que desee, simplemente copie y reemplace los archivos donde le da ese error.
Tuve el mismo problema, lo compilé desde la fuente y copié el archivo requerido. (Supongo que lo hice: completé en el servidor de diferencias y copié los archivos, pero siempre puedes hacerlo también en el mismo servidor)
Descargado en usr/local/src y compilado. copió el archivo requerido al lugar original
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/
Advertencia: compilar PhantomJS desde el código fuente lleva mucho tiempo, principalmente debido a los miles de archivos en el módulo WebKit. Con 4 trabajos de compilación paralelos en una máquina moderna, el proceso completo tarda aproximadamente 30 minutos. Se recomienda encarecidamente instalar el paquete binario ya preparado si está disponible. linux
Nota 1: build.sh de forma predeterminada iniciará 4 (cuatro) trabajos de compilación paralelos. Al compilar en una máquina virtual/servidor u otro entorno limitado, reduzca los trabajos pasando un número, por ejemplo, ./build.sh --jobs 1 para configurar solo un trabajo de compilación a la vez.