Como instalar tanto o gcc-4.7-plugin-dev quanto o gcc-4.8-plugin-dev no Ubuntu 16.04 sem conflitos?

0

Acabei de instalar o Ubuntu 16.04 Xenial no laptop que uso para desenvolvimento.

Atualmente, estou trabalhando em um plug-in para o gcc e quero que meu plug-in seja compatível com várias versões diferentes do compilador (atualmente de gcc-4.6 to gcc-6 ). Por esse motivo, preciso de várias versões diferentes do compilador e dos cabeçalhos de plug-in instalados em minha estação de trabalho de desenvolvimento ao mesmo tempo, para que eu possa construir o plug-in em relação às diferentes versões. Isso funcionou como um encanto com o antigo LTS 14.04, mas com o novo LTS eu tenho um problema que não consigo resolver.

Eu posso instalar facilmente toda a versão do gcc de gcc-4.7 to gcc-5 do repositório padrão, mas quando tento instalar os pacotes gcc-*-plugin-dev eu me deparo com problemas. Basicamente, tudo está bem se eu instalar apenas gcc-4.8-plugin-dev , gcc-4.9-plugin-dev e gcc-5-plugin-dev . Depois disso, se eu tentar instalar o gcc-4.7-plugin-dev , obtenho o seguinte:

fez@vbox1604:~$ sudo apt install gcc-4.7-plugin-dev 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libgmpv4-dev
Suggested packages:
  gmp-doc libgmp10-doc libmpfr-dev
The following packages will be REMOVED:
  gcc-4.8-plugin-dev gcc-4.9-plugin-dev gcc-5-plugin-dev libgmp-dev libmpc-dev libmpfr-dev
The following NEW packages will be installed:
  gcc-4.7-plugin-dev libgmpv4-dev
0 upgraded, 2 newly installed, 6 to remove and 0 not upgraded.
Need to get 1003 kB of archives.
After this operation, 15.0 MB disk space will be freed.
Do you want to continue? [Y/n] n
Abort.
fez@vbox1604:~$

Como você pode ver, não me permite instalar o pacote se eu não remover os outros. O problema parece ser o fato de que as diferentes versões do gcc dependem de versões diferentes de libgmp . Se o fato gcc-4.8-plugin-dev e superior exigirem o pacote libgmp-dev , enquanto gcc-4.7-plugin-dev exigirá libgmpv4-dev . Estes dois últimos são na verdade dois pacotes separados e estão na origem do conflito.

Isso pareceu muito estranho para mim, já que no Ubuntu 14.04 tudo funcionou muito bem. Por isso eu decidi dar uma olhada em packages.ubuntu.com Aqui está o que eu descobri:

  1. sobre libgmp-dev e libgmpv4-dev

    • no Ubuntu 14.04 libgmpv4-dev não existe e todas as versões de gcc-*-plugin-dev dependem de libgmp-dev
    • no Ubuntu 16.04 existem dois pacotes separados libgmp-dev e libgmpv4-dev . Aparentemente, a única diferença entre os dois é que o primeiro permanece no repositório main enquanto o último está em universe .
    • para libgmp-dev as dependências são as mesmas no Ubuntu 14.04 e 16.04
    • O libgmpv4-dev no Ubuntu 16.04, em vez disso, depende basicamente dos mesmos pacotes, mas a nomenclatura e as versões são ligeiramente diferentes daquelas em libgmp-dev . E libgmpv4-dev relatórios "(GCC 4.x compatível)" na sua descrição. Mas eu não entendo porque isso é significativo, já que o gcc-4.8 está na série 4.x mas funciona perfeitamente com o (não-4.x-compatível?) libgmp-dev . E até o Ubuntu 14.04 também o gcc-4.7 trabalhou com apenas libgmp-dev , então não entendi o que mudou.
  2. sobre gcc-4.7-plugin-dev e gcc-4.8-plugin-dev

    • no Ubuntu 14.04 eles dependem da mesma versão da libgmp: libgmp-dev
    • no Ubuntu 16.04 não está claro o porquê, mas eles começam a ter dependências diferentes, como eu mostrei no terminal:
      • gcc-4.7-plugin-dev depende de libgmpv4-dev
      • gcc-4.8-plugin-dev depende de libgmp-dev

Alguém tem alguma idéia sobre por que as coisas são assim? Você sabe se e como posso instalar as versões gcc-4.7-plugin-dev e gcc-4.8-plugin-dev na mesma máquina com o Ubuntu 16.04? Eu não sou um ninja de dependências apt, mas algo parece estranho para mim, e eu realmente preciso que isso funcione como antes porque eu preciso disso para o meu trabalho. Caso contrário, eu tenho que reverter para 14.04 (ou manter a versão mais antiga do gcc no chroot, mas eu gostaria de evitar isso se possível).

Obrigado antecipadamente

fez

Desculpe, mas parece que minha reputação em perguntar ao Ubuntu não é alta o suficiente para postar todos os links para as informações que estou fornecendo sobre os pacotes e suas dependências. Eu posso fornecê-los mais tarde ou em comentários, se você precisar deles. De qualquer forma, basta olhar em packages.ubuntu.com e procurar os nomes exatos de pacotes que forneci para encontrá-los.

Eu sei que existe um ppa para o toolchain do gcc ( link ) e Eu também tentei adicioná-lo às minhas fontes. Ele me permite instalar uma gama mais ampla de versões do gcc (de gcc-4.5 a gcc-6 ), mas isso não corrige o problema nem muda nada com os conflitos.

Eu já tentei instalar a versão que tem conflitos no chroot, e parece funcionar, mas eu realmente gostaria de saber se há uma maneira de corrigir esse problema de dependência sem truques sujos. Em princípio, gostaria de encontrar uma maneira de tornar a instalação gerenciável com o apt.

    
por fez 04.08.2016 / 18:22

1 resposta

0

Bem, o que eu faço é usar o docker ou o contêiner LXD para criar "Compiladores-Hosts" para evitar tais problemas. Isso também funciona para você?

    
por 0x0C4 04.08.2016 / 19:42