Executando um binário ligado estaticamente com um glibc diferente

6

Eu tenho um binário vinculado estaticamente para uma ferramenta que estou tentando executar na RHLE4. A ferramenta reclama da glibc. Precisa de 2.4 e o do sistema é 2.3. Aqui está a mensagem que aparece:

./wkhtmltoimage-i386: /lib/tls/libc.so.6: version 'GLIBC_2.4' not found (required by ./wkhtmltoimage-i386)

Existe uma maneira de construir o glibc2.4 e usá-lo apenas para esta ferramenta, sem substituir o glibc2.3 no sistema? Ao construir o glibc2.4, qual prefixo devo usar para configurar?

    
por letronje 04.10.2010 / 19:27

1 resposta

10

Como o código-fonte desta ferramenta wkhtmltoimage está disponível, eu sugiro que você recompile da fonte com o glibc nativo do seu sistema. Provavelmente será ainda mais rápido do que recompilar a glibc, o que não é uma tarefa fácil.

Um executável estaticamente vinculado já inclui código para todo o C chamadas de biblioteca que precisa fazer, então você não pode compilar separadamente um novo glibc e ligar o executável a ele. No entanto, programas usando glibc nunca são completamente estáticas: algumas chamadas de biblioteca (todas aquelas conectadas com o "Serviço de Nomes", ou seja, getuid() e similar) ainda fazem uso de módulos carregados dinamicamente (os arquivos libnss*.so normalmente encontrados em /lib ). Provavelmente é por isso que o programa está falhando: é procurando por algum módulo NSS, mas só pode encontrar glibc2.3 .

Se você realmente quer seguir a estrada de recompilar a glibc, o seguinte poderia funcionar (Aviso: não testado!):

  1. configure o glibc2.4 para instalar em um diretório não-sistema , por exemplo. /usr/local/glibc2.4 , depois compile e instale;

  2. execute wkhtmlto* especificando-o como o primeiro componente no caminho de pesquisa do vinculador dinâmico ( LD_LIBRARY_PATH ):

    env LD_LIBRARY_PATH = / usr / local / glibc2.4 / lib wkhtmltoimage ...

Atualização: Isso não foi tão fácil: ter duas bibliotecas distintas no sistema requer mais do que apenas recompilar / instalar, porque a libc procurará pelo vinculador de tempo de execução e pelos módulos NSS de carga dinâmica em locais fixos. O programa rtldi permite instalar diferentes versões da GNU libc em um único sistema Linux; sua página da web tem instruções (mas essa é uma tarefa de nível de especialista, então elas definitivamente não são passo a passo passo a passo).

Deixem-me salientar novamente que será muito menos trabalhoso recompilar wkhtmltoimage ...

    
por 04.10.2010 / 19:49