CrossCompiling com libboost para arquitetura ARM

0

Estou usando um sistema Ubuntu de 32 bits e meu objetivo é compilar meu programa C ++ para arquitetura de armação (beagleblack). No entanto, meu programa C ++ precisa do significado libboost. Recebo erros como este ao compilar:

/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lboost_system
-bash: /usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld:: No such file or directory

Depois de ler alguns blogs, acho que tenho que compilar o libboost para o ARM sozinho.

Pergunta: Minha suposição é verdadeira? Não existe realmente um libboost pré-compilado para o ARM que possa ser usado com g++-arm-linux-gnueabi para compilar para o ARM no Ubuntu 32 bits?

    
por Anonymous 16.06.2014 / 13:55

1 resposta

0

O Ubuntu tem uma biblioteca Boost pré-compilada para armhf (suponho que o Beagleblack possa usar armhf ). Assumindo que você estará usando o Ubuntu no Beagleblack, existem duas maneiras de fazer isso:

  1. Use pbuilder ou sbuild para compilar em um chroot da arquitetura armhf . Isto (geralmente) requer que você tenha o pacote Debian para o que você quer compilar. No entanto, você poderia (pelo menos em sbuild ) também iniciar uma instância do chroot, usar apt-get para obter as bibliotecas necessárias e compilar seu programa lá. pbuider é geralmente mais fácil de configurar.

  2. Use o multiarch a seu favor e instale armhf libraries no seu computador, assim você pode compilar e usar bibliotecas existentes sem usar um chroot. Para fazer isso, execute sudo dpkg --add-architecture armhf e edite /etc/apt/sources.list para conter deb [arch=armel] http://ports.ubuntu.com/ubuntu-ports saucy main universe (se você não estiver usando o Saucy, substitua pelo release apropriado. Em seguida, execute sudo apt-get update e sudo apt-get install libboost-system1.53.0:armhf (ou algum outro pacote do Boost) postfixed with :armhf ). Isso permitirá que você tenha as bibliotecas armhf instaladas em seu sistema em /usr/lib/aarch64-linux-gnu .

Observe que o segundo método acima funcionará apenas para bibliotecas multiarch, que devem ser a maioria das bibliotecas no repositório do Ubuntu. Você também pode querer usar o segundo método em um ambiente chrooted para evitar bagunçar o seu sistema (veja aqui para instruções que usam o Precise, que não é compatível com multiarch.

    
por saiarcot895 16.06.2014 / 14:21