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 / 1500315
Accepted
John Dallman
John Dallman
Asked: 2024-01-17 06:10:25 +0800 CST2024-01-17 06:10:25 +0800 CST 2024-01-17 06:10:25 +0800 CST

Como posso usar uma versão posterior do GCC além do suporte aos tempos de execução do sistema? O software criado com ele pode ser executado em um sistema com apenas pacotes normais instalados?

  • 772

Eu não uso muito o Ubuntu, sendo um engenheiro de plataformas e construção em uma organização que é principalmente a Red Hat Enterprise e seus similares.

O problema de apenas construir e usar um GCC atualizado são as bibliotecas de tempo de execução da linguagem. Eu teria que distribuí-los, complicando as remessas e deixando os advogados nervosos com a GPL, ou exigir que meus clientes construíssem e instalassem o mesmo GCC.

Eu produzo software comercial de código fechado, principalmente modelagem matemática, compilado a partir de fontes C e C++ e enviado como bibliotecas compartilhadas. Isso significa que estou extremamente interessado em obter compatibilidade binária entre distribuições. Isso é prático porque tudo o que minhas bibliotecas precisam está disponível na glibc e nos tempos de execução da linguagem GCC ( libgcc_s.so.1e libstdc++.so.6). Ambos os conjuntos de bibliotecas têm compatibilidade futura muito forte, devido ao fato de todos os seus símbolos serem versionados e novas versões serem criadas sempre que há uma mudança de comportamento.

Atualmente, faço minhas compilações no RHEL 8.x. Ele possui GCC (8.x) e glibc (2.28) bastante antigos; portanto, se eu construísse minhas bibliotecas usando-o ingenuamente, teria compatibilidade futura com Linux com versões iguais ou posteriores dessas bibliotecas. No entanto, aquele antigo GCC não suporta o padrão de linguagem C++20, que os desenvolvedores desejam muito usar, muito menos o novo padrão C++23. RHEL fornece uma solução para isso, mas não encontrei nada semelhante para o Ubuntu.

A solução Red Hat é um "conjunto de ferramentas GCC". Existem vários deles, mas todos funcionam da mesma maneira. Eles fornecem uma versão posterior do GCC, construída para rodar nos tempos de execução do RHEL 8.x, nos cabeçalhos padrão e em alguns scripts especiais para GNU ld. Esses scripts dizem ao vinculador para usar as bibliotecas do sistema para os tempos de execução da linguagem GCC sempre que possível, e para funções que não estão nas bibliotecas do sistema, vincular estaticamente o código necessário à biblioteca compartilhada (ou executável) que está sendo vinculada. Isso parece assustador, mas funciona extremamente bem. Provavelmente isso ocorre porque a Red Hat é uma grande contribuidora para o GCC e garante que ele continue funcionando.

O Ubuntu tem algo semelhante? Eu gostaria de ter uma alternativa ao Red Hat, caso a exploração das brechas da GPL consiga eliminar as semelhanças de trabalho de seu sistema operacional, que é muito caro para ser executado em todas as máquinas de teste.

Meu conhecimento atual de compilação e tempos de execução do Ubuntu é explicado em minha resposta a uma pergunta relacionada aqui .

Para o caso C++20, mudar para o Ubuntu LTS 22.04 preencheria a necessidade. No entanto, o C++23 está começando a aparecer. Podemos esperar o Ubuntu LTS 24.04 em breve, mas provavelmente será muito cedo para o suporte ao C++ 23 no GCC 14, com lançamento previsto para abril ou maio de 2024. Estou presumindo que os clientes "empresariais" do Ubuntu irão instale apenas versões LTS em seus servidores principais, em vez das versões intermediárias.

Se o Ubuntu não fizer isso, tudo bem. Dado que é um Enterprise Linux, pensei que poderia estar faltando alguma coisa.

compiling
  • 2 2 respostas
  • 442 Views

2 respostas

  • Voted
  1. Best Answer
    zwets
    2024-01-17T08:49:45+08:002024-01-17T08:49:45+08:00

    Não conheço algo semelhante no Ubuntu às 'bibliotecas shim' que você descreve - e que reconhecidamente são uma solução elegante para um problema. No entanto, acho que o problema não é tão proeminente no Ubuntu.

    As versões do Ubuntu geralmente incluem (e são construídas com, consulte o conjunto de ferramentas PPA e a página Wiki relacionada ) a versão upstream mais recente do GCC.

    Por exemplo, o 22.04 LTS tinha o GCC 11.2, que era o lançamento mais recente da FSF na época, e o Ubuntu 23.10 tinha o GCC 13.2, o lançamento atual da FSF (julho de 23). Com os lançamentos do Ubuntu saindo a cada seis meses, na prática você sempre estará no GCC mais recente.

    (Existe até o gcc-snapsnotpacote com a versão de desenvolvimento upstream mais recente do GCC, mas não se destina a compilações distribuíveis.)

    O problema existiria apenas para desenvolvedores que trabalham com, digamos, 20.04 LTS (a versão mais antiga do Ubuntu suportada), que precisam de um compilador mais recente que o GCC 9.3. Não consigo pensar em uma solução mais simples para esse problema do que apenas atualizar para 22.04 LTS ou 23.10 e obter o GCC mais recente gratuitamente com ele.

    Além disso, se eles precisarem de recursos do GCC mais recente (e estiverem direcionados ao Ubuntu), então isso quase certamente seria para construir software para o próximo lançamento. Por que eles fariam isso a partir de 20.04 LTS?

    Considerando que se isso for para manutenção de software em uma versão suportada (atualmente 20.04, 22.04 e 23.10), então seria improvável que isso exigisse uma grande atualização do GCC. Isso pode ser um problema maior para a Canonical, com o programa de manutenção estendida (ESM).

    • 4
  2. waltinator
    2024-01-17T22:56:23+08:002024-01-17T22:56:23+08:00

    Sim. Vá para https://gnu.org , baixe a fonte do GCC e o ambiente de construção, instale o build-essentialpacote. Leia todos os README*arquivos e outros documentos que o acompanham. Leia man hierpara ver onde colocá-lo (provavelmente a /usr/localárvore) e especifique-o ao executar./configure

    • 2

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