
Estou tentando instalar o PhantomJS v1.6 em meu servidor Centos 5.8. Estou com o seguinte erro ao tentar executar o 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)
Algumas pesquisas me levam a acreditar que esses são arquivos de sistema de nível bastante baixo com os quais não tenho certeza se devo mexer. Alguma idéia de como fazer isso funcionar no meu servidor?
Responder1
Ele está procurando símbolos versionados em glibc e libstdc++. As versões nas bibliotecas do seu sistema são mais antigas, então não correspondem, o que faz sentido, já que o CentOS rastreia o RedHat AdvancedServer, que é bastante conservador quando se trata de software novo.
Você pode verificar os símbolos em sua libstdc++ desta forma:
nm -D /usr/lib64/libstdc++.so.6 | grep GLIBC
nm
despeja símbolos nomeados, -D para bibliotecas dinâmicas e grep para seus nomes
Hmm, essas são bibliotecas bastante básicas. libstdc++ é usado por qualquer aplicativo que usa C++ em seu sistema operacional. glibc é usado por praticamente tudo. Você provavelmente não deseja atualizá-los e, mesmo que o fizesse, provavelmente perderia suas atualizações na próxima atualização do sistema.
Eu tive um problema semelhante com o Firefox, você pode lidar com isso desta forma:
- Encontre um repositório Fedora RPM.Esse site parece útil.
- Escolha uma versão. Não se preocupe muito com qual; se não funcionar, tentaremos novamente
- Encontre os RPMs libc e libstdc++ x86_64 para a versão que você escolheu. Baixe.
- Vá para um diretório tmp e descompacte-o:
rpm2cpio libstdc++WHATEVER.rpm | cpio -iv --make-directories
- crie outro diretório, este precisa permanecer um pouco. Encontre um lugar em /usr/local ou em seu diretório inicial. Eu diria, talvez, $HOME/lib/lib64 apenas para dar um nome. Substitua o nome conforme necessário.
mkdir $HOME/lib/lib64
- Encontre o arquivo libstdc++.so.6 e copie para $HOME/lib/lib64.
Agora você tem a lib necessária em $HOME/lib/lib64 (ou onde quer que você a tenha colado). Agora, ao executar seu aplicativo, você precisa informar como procurar a nova biblioteca.
LD_LIBRARY_PATH=$HOME/lib/lib64:$LD_LIBRARY_PATH appThatNeedsNewLib arg1 arg2
Esteja preparado para fazer isso várias vezes - quando fiz isso, obter a versão correta do libstdc++ expôs outros arquivos antigos para os quais eu precisava baixar atualizações também.
Responder2
Aplica-se a: PhantomJS 1.6. E testado no Centos 5.6
Você pode compilá-lo a partir do código-fonte e funcionará perfeitamente.
./build.sh
Após a construção, implante-o, que você pode executar em qualquer lugar que desejar, simplesmente copie e substitua os arquivos onde estiver apresentando esse erro.
Eu tive o mesmo problema, compilei a partir do código-fonte e copiei o arquivo necessário. (presumo que sim: cumpri o servidor diff e copiei os arquivos, mas você sempre pode fazer isso no mesmo servidor)
Baixado em usr/local/src e compilado. copiou o arquivo necessário para o local 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/
Aviso: compilar o PhantomJS a partir do código-fonte leva muito tempo, principalmente devido aos milhares de arquivos no módulo WebKit. Com 4 trabalhos de compilação paralela em uma máquina moderna, todo o processo leva cerca de 30 minutos. É altamente recomendável instalar o pacote binário pronto, se estiver disponível. Linux
Nota 1: build.sh por padrão lançará 4 (quatro) jobs de compilação paralela. Ao construir em uma máquina/servidor virtual ou outro ambiente limitado, reduza os trabalhos passando um número, por exemplo, ./build.sh --jobs 1 para definir apenas um trabalho de compilação por vez.