Usando o gcc (= 4.8) com o OBS (OpenSUSE Build Service)

3

Atualmente, estou usando o OpenSUSE Build Service ( link ) para criar o ArangoDB. No entanto, para alguns recursos mais recentes do C ++, eu preciso de um compilador C ++ razoavelmente atual. Para algumas das distribuições mais antigas (como Debian6 ou CentOS), o compilador padrão é simplesmente muito antigo.

Tenho certeza que deve haver uma maneira de usar o compilador mais novo com o OBS, mas me perdi na documentação do OBS. Alguém pode me apontar na direção certa?

    
por fceller 05.04.2014 / 11:15

2 respostas

1

Eu fiz isso no passado para bibliotecas, mas não criei ferramentas, então não vejo por que o seguinte não deveria funcionar, a não ser problemas de compatibilidade binária se você cria alguma biblioteca. Como vitalyster apontou esta não é uma abordagem ideal e você pode ter problemas, mas é tecnicamente possível fazê-lo desta forma.

A maneira que eu fiz isso é incluir o pacote (no seu caso GCC) no meu projeto e configurar o build / use no build (em repositórios) para construir apenas as arquiteturas que não têm uma versão nova o suficiente .

Também coloco BuildRequires: gcc >= 4.8 em sua especificação para garantir que a versão mais recente seja escolhida, mas isso não é necessário

Um exemplo pode ser encontrado em link no pacote luajit está disponível somente no repositório openSUSE: Factory , então eu tenho uma cópia no repositório que constrói para tudo, exceto openSUSE: Factory , que usa aquele fornecido no repositório upstream.

No seu repositório você pode ramificar o pacote existente , o que significa que você pode encontrar uma versão do gcc que já está disponível no obs e usar isso em vez de criar o seu próprio.

    
por 13.05.2014 / 04:38
0

Sim, você tem razão, o OpenSUSE Build Service permite que você construa pacotes para o número de distribuições linux, mas NO , você está pensando errado em usar a última versão do compilador C ++ para todas as distribuições. Seu aplicativo deve usar compilador e bibliotecas fornecidos pela distribuição, e o OBS permite testar a compatibilidade de seu aplicativo com as distribuições mais importantes, sem a necessidade de instalar todos eles. Então você tem duas opções:

  1. faça as coisas conforme o esperado - verifique as distribuições que deseja suportar e adapte seu código à versão do compilador e das bibliotecas - oculte "novos recursos" com blocos de pré-processador para o compilador mais recente e grave código de compatibilidade para o compilador / biblioteca antigo. O OBS pode construir automaticamente seu aplicativo e mostrar problemas e você pode consertá-lo facilmente.
  2. use o compilador mais recente e vincule estaticamente todas as bibliotecas necessárias, incluindo as bibliotecas atuais libgcc e dependidas, para não depender das versões do compilador / bibliotecas de distribuição, e implemente isso em um pacote grande. Este é o caminho usado principalmente pelos aplicativos proprietários, e os usuários do Linux os odeiam - esses aplicativos trazem para o sistema várias cópias das mesmas bibliotecas, e ninguém se importa como serão atualizadas - imagine, você está usando o OpenSSL e vincule seu aplicativo estaticamente com o OpenSSL 1.0.1e, que tem o bug Heartbleed - o fornecedor de distribuição envia a atualização de segurança e todos os aplicativos que usam a distribuição A biblioteca fornecida será segura quando o usuário instalar a atualização, mas seu aplicativo continuará usando sua biblioteca insegura estaticamente vinculada. Sim, você mesmo pode manter todas as bibliotecas necessárias e atualizar seu aplicativo quando as atualizações de segurança estiverem prontas, mas esse é o trabalho do fornecedor de distribuição, e você repetirá seu trabalho árduo.
por 11.04.2014 / 19:53