Compila com o gcc recente no RedHat6: Como distribuir o software?

1

Meu software compila em uma variedade de sistemas operacionais, incluindo o RHEL7. Eu tenho um pedido para construí-lo para ser executado no RHEL6. Meu problema é que meu código C ++ depende muito dos recursos do C ++ 11 que não estão presentes no gcc-4.4, o que vem com o RHEL6. nullptr, auto, lambdas não são suportados e há muito no código.

Eu vi que existem maneiras de ter versões mais recentes do gcc para rodar no RHEL6, como o Developer ToolSet, por exemplo. Não tenho dúvidas de que poderei criar meu software para o RHEL6.

No entanto, uma vez compilado com, por exemplo, o gcc-6, o que terei que fornecer com os binários do meu software? A biblioteca C do gcc-6? A biblioteca C ++ do gcc-6? Devo ligá-los estaticamente ao meu binário?

Além disso, meu software é empacotado em arquivos .rpm e instalado em locais padrão: / usr / bin, / usr / lib ... Onde eu instalaria esses novos arquivos de biblioteca C e C ++ no sistema de destino? ? (Obviamente não em / usr / lib onde eles podem interferir com os padrões!)

Edit: Meu software é um objeto compartilhado, eu acho que posso vincular estaticamente a biblioteca C ++? Mas o que acontece com o programa (eu não tenho controle sobre isso) que irá usar o meu objeto compartilhado. Pode usar outra versão da biblioteca C ++? O vinculador não encontrará muitos duplicados? Parece que eu abria uma lata de minhocas ...

Editar: Seria possível usar o compilador gcc mais recente com a biblioteca C ++ padrão do RHEL6?

Editar: Observe que o objeto compartilhado tem uma interface "C" pura (padronizada).

    
por Didier Trosset 16.08.2017 / 09:01

1 resposta

1

Where would I install these new C and C++ library files on the target system? (Obviously not in /usr/lib where they may interfere with the default ones!)

Pelo contrário, você instalaria essas novas bibliotecas em /usr/lib/ (ou qualquer que seja o padrão no sistema de destino; no meu Debian eles iriam entrar em /usr/lib/x86_64-linux-gnu/ e /lib/x86_64-linux-gnu/ ). Você precisa se preocupar com rpath -s.

My software is a shared object, I guess I can statically link the C++ library?

Isso provavelmente não funcionará para um objeto compartilhado (mas poderia funcionar para um executável; você vincularia estaticamente o libstdc++ e dinamicamente o libc.so ). No entanto, um objeto compartilhado pode ser vinculado a outras bibliotecas compartilhadas. Observe que, se você está fornecendo uma biblioteca C ++ 11, seus usuários precisam de um compilador C ++ 11 (a menos que você projete com muito cuidado sua biblioteca para ter apenas uma API compatível com C).

Você provavelmente enviaria alguns arquivos de cabeçalho e deveria tirar proveito do pkg-config . arquivo .pc apropriado.

Considere ler o Guia da Biblioteca de Programas , C++ dlopen mini HowTo & O documento Como escrever uma biblioteca compartilhada do Drepper

Would it be possible to use the more recent gcc compiler with the standard C++ library of the RHEL6 stock one?

Não; a biblioteca C ++ padrão está intimamente ligada ao compilador C ++ (e poderia ter uma ABI diferente).

BTW, recomendo veementemente enviar o código-fonte da sua biblioteca e talvez torná-lo algum software livre . Você pode então pedir ajuda para empacotar sua biblioteca apropriadamente da comunidade que trabalha na antiga distribuição de Redhat.

Observe que sua biblioteca pode ter muitas outras dependências. Por exemplo, se é uma biblioteca GUI, provavelmente usa outros recursos (como fontes ou imagens).

    
por 17.08.2017 / 14:02