AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1376449
Accepted
Bram
Bram
Asked: 2021-11-19 22:17:11 +0800 CST2021-11-19 22:17:11 +0800 CST 2021-11-19 22:17:11 +0800 CST

Por que um binário construído em 21.10 não é compatível com a instalação de 21.04?

  • 772

Não entendo por que um binário construído em 21.10 não é compatível com um sistema 21.04.

O binário está vinculado ao libc.so.6qual também está disponível na versão 21.04 do sistema operacional.

Mesmo binário, no sistema 21.10:

$ ldd turboledzd
    linux-vdso.so.1 (0x00007ffdc2595000)
    libhidapi-hidraw.so.0 => /lib/x86_64-linux-gnu/libhidapi-hidraw.so.0 (0x00007fdd64057000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd63e2f000)
    libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007fdd63e06000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fdd64085000)

E no sistema 21.04:

$ ldd turboledzd 
./turboledzd: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./turboledzd)
    linux-vdso.so.1 (0x00007fff9c570000)
    libhidapi-hidraw.so.0 => /lib/x86_64-linux-gnu/libhidapi-hidraw.so.0 (0x00007f37ec402000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f37ec216000)
    libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f37ec1ed000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f37ec423000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f37ec1cb000)

Minha pergunta:

Se libc.so.6a partir de 21.04 não for compatível com a libc.so.6partir de 21.10, por que a libc em 21.10 libc.so.7não é chamada?

Ou, melhor, por que não está vinculado a algo chamado libglibc.so.2.34- se isso é uma dependência?

versions
  • 3 3 respostas
  • 3516 Views

3 respostas

  • Voted
  1. muru
    2021-11-19T22:41:10+08:002021-11-19T22:41:10+08:00

    Se libc.so.6a partir de 21.04 não for compatível com a libc.so.6partir de 21.10, por que a libc em 21.10 libc.so.7não é chamada?

    libc.soé uma biblioteca tão essencial quanto possível. Quase tudo depende disso. Um dos objetivos da glibc é fornecer compatibilidade com versões anteriores - um programa que pode ser executado com uma versão mais antiga libc.so.6deve (geralmente) também funcionar bem com uma versão mais recente. No entanto, se você aumentar o soname libc.so.7apenas porque adicionou alguma nova função, todos esses programas criados anteriormente precisarão de uma reconstrução sem um bom motivo. Ainda não houve uma grande quebra na API da glibc para garantir isso ainda.

    Não entendo por que um binário construído em 21.10 não é compatível com um sistema 21.04.

    Não vejo ninguém garantindo compatibilidade com versões futuras (que era o que você esperava até 21.04 ser capaz de executar algo a partir de 21.10) - por que você esperaria isso se não tomar precauções para garantir isso?

    • 25
  2. Archisman Panigrahi
    2021-11-19T22:25:14+08:002021-11-19T22:25:14+08:00

    De acordo com packages.ubuntu.com , 21.04 usa glibc 2.33, enquanto 21.10 usa glibc 2.34, que não é completamente compatível.

    No entanto, você deve poder criar binários para o Ubuntu 21.04 a partir do código-fonte.

    A menos que a fonte seja interpretada, você geralmente precisa construir pacotes binários separadamente para diferentes versões do Ubuntu. O Launchpad pode automatizar isso para você.

    por que a libc em 21.10 não é chamada de libc.so.7?

    Essa é uma decisão que apenas os desenvolvedores da glibc podem tomar.

    • 13
  3. Best Answer
    ssokolow
    2021-11-22T12:57:26+08:002021-11-22T12:57:26+08:00

    O termo para o Google é "versão de símbolo glibc".

    Como esta introdução explica, a glibc contém várias versões de cada símbolo que mudou ao longo do tempo e, portanto, libc.so.6contém todas as versões da glibc desde 2.0 até qualquer versão que ela diga.

    Ao vincular uma nova biblioteca ou binário a ela, você está usando os .harquivos e símbolos exportados para as versões mais recentes dos símbolos.

    Quanto ao acesso aos símbolos mais antigos, há uma pergunta no StackOverflow chamada Como posso vincular a uma versão específica da glibc? , mas como todas as suas outras dependências provavelmente estarão vinculadas aos símbolos mais recentes também, é muito mais fácil usar o Docker ou um chroot para direcionar as versões mais antigas do sistema, porque você provavelmente acabará construindo uma do zero se não o fizer.

    Os desenvolvedores Python realmente mantêm contêineres Docker nomeados manylinux...especificamente para estabelecer uma linha de base confiável para construir rodas (pacotes binários redistribuíveis) para pacotes Python com componentes compilados.

    Acredito que a abordagem do Windows esteja mais próxima de agrupar vários perfis claramente definidos e instar todos os autores de bibliotecas pré-compiladas a oferecer compilações direcionadas a perfis mais antigos. (Com a ressalva de que você deve assumir que o material deve ser freed pela mesma unidade mallocde compilação que o fez porque o PE não possui símbolos globais e bibliotecas diferentes podem depender de diferentes versões do alocador com suas próprias staticvariáveis ​​e diferenças semânticas. )

    • 3

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve