Empacotando práticas recomendadas para dependências de terceiros

1

Estou empacotando um aplicativo pela primeira vez para o Ubuntu. Eu tenho algumas dependências, as principais são Qt e ICU. Eu só não estou claro como implantar esses aplicativos sem entrar em uma espécie de dll-hell para Linux.

Por exemplo, eu gostaria de usar a versão 4.7.4 do Qt porque há algumas correções de bugs nessa versão que eu gostaria de aproveitar. Eu também gostaria de implantar meu aplicativo em todas as versões atualmente suportadas do Ubuntu, o que me leva de volta ao Lucid. Mas a versão mais recente disponível para o Lucid é a 4.6.2, que nem é compatível com API com 4.7.4. As opções, como eu vejo:

  • Apenas diga "resistente" e suporte apenas versões do Ubuntu que possuam a biblioteca que eu preciso, o que significaria Oneiric neste momento. Para versões anteriores, eles estão por conta própria para encontrar uma biblioteca 4.7.4 e resolver todas as suas dependências.
  • Forneça versões privadas da biblioteca, diga libQtCore4_mycompany e um pacote para instalá-las.
  • Cole uma versão privada do assembly lado-a-lado com meu aplicativo (talvez /opt/company/package/lib ) e defina LD_LIBRARY_PATH antes de executar o meu aplicativo.

Nada disso é ótimo, e em particular, debuild é péssimo de usar se você se afastar um pouco das expectativas deles. Eu não posso ligar estaticamente por causa das restrições da LGPL (pelo menos é assim que eu as entendo.)

Eu também tenho a pergunta inversa. Suponha que eu decida colocar uma dependência em libQtCore4 (>= 4.7.4) . Eu tenho visto regressões suficientes entre as versões do Qt que há uma chance de que 4.7.5, ou 4.8.0, irá quebrar algo na minha aplicação. Isso é algo que você tem que lidar ou é uma prática recomendada depender de uma versão exata da biblioteca, como libQtCore4 (= 4.7.4) ?

    
por Dave 05.10.2011 / 14:50

1 resposta

1

Se você realmente deseja oferecer suporte a versões que não possuem a versão de biblioteca necessária, use apenas a vinculação estática. Ter uma biblioteca compartilhada na qual você é o único usuário de derrotar o propósito de bibliotecas compartilhadas, então você pode também colocar tudo em um binário. Você economizará espaço, já que as partes da biblioteca que você não chamar serão descartadas.

Gostaria de sugerir que você comece com uma construção onírica que apenas lista a dependência normalmente, depois mude para a vinculação estática quando voltar a portá-la para versões mais antigas.

    
por psusi 05.10.2011 / 16:26