linaro cross compiling com dependência .deb

0

Não consigo encontrar as respostas, por isso estou perguntando aqui.

Eu uso o compilador cruzado ARM Linaro de 64 bits para compilar meu código em um Linux local 14.04 64bit Linux na Intel ( gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ ).

Meu código requer o uso de libsensor4 e libsensor4-dev com a opção de vinculador -lsensors . Eu não tenho nenhum problema em compilar meu código usando o host de 64 bits do Ubuntu 14.04 Linux na Intel. Mas toda vez que eu compilo meu código usando o compilador cruzado ARM de 64 bits, ele tem erros:

cannot find -lsensors

e

sensors/sensors.h: no such file or directory.

O -lsensors é de libsensors4.deb e o sensors.h é de libsensors4-dev . Então, como posso obter esses dois pacotes no compilador Linaro?

    
por alien 12.04.2017 / 21:10

1 resposta

0

Uma maneira de obter aarch64 packages no sistema de compilação é ativá-lo como uma arquitetura externa:

sudo dpkg --add-architecture aarch64
sudo apt-get update

Agora você pode remover libsensors4-dev de sua arquitetura de criação e instalá-la para a arquitetura do host aarch64 :

sudo apt-get install libsensors4-dev- libsensors4-dev:aarch64+

É necessário remover o pacote de arquitetura de construção porque ele não pode coexistir com um pacote de mesmo nome para uma arquitetura diferente. A dependência libsensors4:aarch64 , no entanto, pode coexistir com libsensors4 1 . Isso significa que você pode continuar executando programas no sistema de compilação que são dinamicamente vinculados a libsensors4 , mas não é possível usar libsensors4-dev para vincular novos programas de arquitetura de compilação.

Eu não sei como você configurou e instalou o compilador cruzado, mas o GCC geralmente seleciona os locais canônicos para arquivos de cabeçalho ( /usr/include ) e arquivos de biblioteca ( /usr/lib/<architecture>-<system-type> ) que é exatamente para onde o DPKG os extrai libsensors4-dev (qualquer arquitetura). Se esse não for o caso, você pode informar ao GCC / G ++ para adicionar diretórios de arquivos de inclusão com -I<PATH> e diretórios de biblioteca com -L<PATH> . Além disso, você pode listar os diretórios de inclusão atuais com gcc -xc++ -E -v /dev/null e os diretórios de biblioteca atuais com gcc gcc -print-search-dirs .

1 Você pode verificar se um pacote pode coexistir com seu "irmão" de uma arquitetura diferente se você olhar para o campo Multi-Arch nas informações de controle do pacote. “Mesmo” significa que pode coexistir. Use dpkg-query -s <PACKAGE> , apt-cache show <PACKAGE> ou dpkg-deb -I <DEB-FILE> para mostrar informações de controle de pacote. Para mais informações, consulte os campos Especificação Multiarch em Binary package .

    
por David Foerster 13.04.2017 / 08:26