Configure o ambiente para compilação cruzada para i386, armel, armhf, arm64 e mips sem conflitos libglib2

3

Estou tentando configurar um ambiente de compilação para um pacote de software no Debian Jessie. Eu preciso produzir binários amd64, i386 e, eventualmente, armel e armhf do software. Seria legal se eu pudesse fazer uma compilação cruzada para TODAS as arquiteturas suportadas pelo Debian, que são muito mais do que isso, mas aquelas 4 são as que eu particularmente me importo.

Eu comecei com o Debian Debian Jessie e adicionei o i386 multiarch.

Tudo funcionou bem até eu ter que instalar o libpulse-dev , que é uma dependência do software. Ao instalá-lo, recebi

The following packages have unmet dependencies: libpulse-dev : Depends: libglib2.0-dev but it is not going to be installed

com apt-get e

The following packages have unmet dependencies: libglib2.0-dev : Conflicts: libglib2.0-dev:i386 but 2.42.1-1 is installed.

com aptitude .

Parece que libglib2:amd64 e libglib2:i386 conflict - eles não podem ser instalados ao mesmo tempo. Alguém em #debian da Freenode me disse que é uma limitação bem conhecida do multiarch.

Eu tenho que ter esse pacote instalado para fazer construções i386.

Estou pensando em remover o i386 multiarch, já que ele não funciona, e configurar o i386 chroot e construir a versão i386 do software dentro do chroot.

Essa solução chroot deve funcionar para i386, mas não funciona quando eu estiver produzindo binários para armel, armhf, arm64, mips e todas as outras arquiteturas - não serei capaz de fazer essas construções no armel, armhf, arm64, mips, etc. chroots desde que eu não posso executar executáveis arm e mips no meu processador.

Como posso produzir compilações do software que visam as arquiteturas amd64, i386, armel, armhf, arm64 e mips no mesmo sistema Debian Jessie de uma maneira consistente (ou seja, todas as compilações são feitas da mesma maneira, não "builds for one arquitetura use chroot, mas builds para outras arquiteturas usam multiarch ") sem ter libglib2 conflitos como eu faço ao usar multiarch?

    
por Zorro-One 05.08.2015 / 05:06

2 respostas

1

Infelizmente, glib2.0 não é compatível com multiarch (ainda); você pode se inscrever no link se quiser ficar de olho nas coisas.

Para criar software para várias arquiteturas, você pode usar pbuilder e / ou qemubuilder . O Debian tem um suporte muito bom para chroots usando o Qemu para executar binários em arquiteturas diferentes; debootstrap suporta isso nativamente.

    
por 05.08.2015 / 09:58
0

Você pode combinar as duas abordagens, fazer compilação cruzada com multiarch para dependências, mas usar um chroot dedicado para cada arquitetura de destino.

Desta forma, você não terá tantos problemas com conflitos. Eu não posso garantir que funcionará para o seu pacote, mas tem uma chance muito maior de tentar fazer todas as arquiteturas sob o mesmo sistema de arquivos raiz.

    
por 25.05.2016 / 13:20