* buntu multiarch: libusb-dev & libusb para armel

1

Eu quero configurar um ambiente de compilação cruzada para o SBC da Phidget. A libphidget precisa do libusb-1.0-0 e do libusb-1.0-0-dev e, atualmente, não os encontra:

~/Softwares/libphidget-2.1.8.20151217 $ ./configure --prefix=/usr/arm-linux-gnueabi --host=arm-linux-gnueabi
[...]
checking for library containing libusb_init... no
checking for library containing usb_find_busses... no
configure: error: Missing libusb!

O que tentei:

Eu tenho essas libs para o meu arch (amd64) e tentei instalar o armel. Eu adicionei o arco através do dpkg

$ dpkg --print-foreign-architectures
i386
armel

$ apt-config dump |grep -i arch
APT::Architecture "amd64";
APT::Architectures "";
APT::Architectures:: "amd64";
APT::Architectures:: "i386";
APT::Architectures:: "armel";

em seguida, adicionei a fonte (através de uma pesquisa no launchpad.net, eu encontrei esses pacotes e arch em Precise: deb [arch=armel,armhf] http://ports.ubuntu.com/ubuntu-ports precise main universe ), e finalmente tentei instalar através dos repositórios:

$ apt-cache policy libusb-1.0.0:armel
libusb-1.0-0:armel:
  Installé : (aucun)
  Candidat : 2:1.0.9~rc3-2ubuntu1
 Table de version :
     2:1.0.9~rc3-2ubuntu1 500
        500 http://ports.ubuntu.com/ubuntu-ports precise/main armel Packages
libusb-1.0-0-dev:armel:
  Installé : (aucun)
  Candidat : 2:1.0.9~rc3-2ubuntu1
 Table de version :
     2:1.0.9~rc3-2ubuntu1 500
        500 http://ports.ubuntu.com/ubuntu-ports precise/main armel Packages

$ luneart@luneart-Lenovo-renew ~ $ sudo apt-get install libusb-1.0-0-dev:armel libusb-1.0-0:armel
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Certains paquets ne peuvent être installés. Ceci peut signifier que vous avez demandé l'impossible, ou bien, si vous utilisez la distribution unstable, que certains paquets n'ont pas encore été créés ou ne sont pas sortis d'Incoming.
L'information suivante devrait vous aider à résoudre la situation : 

Les paquets suivants contiennent des dépendances non satisfaites :
 libusb-1.0-0:armel : Dépend: libc6:armel (>= 2.8) mais ne sera pas installé
 libusb-1.0-0-dev:armel : Dépend: libc6-dev:armel mais ne sera pas installé ou
                                  libc-dev:armel
E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l'état ».

Ele não instala nada porque perde as dependências libc6 do armel, embora deva resolvê-las. Eu tentei encontrar cross package para libc6 (eu procurei pela primeira vez por pacotes cross libusb, mas não encontrei nenhum):

$ apt-cache search libc6 armel
libc6-armhf - Embedded GNU C Library: ARM hard float shared libraries for armel
libc6-dev - Embedded GNU C Library: Development Libraries and Header Files
libc6-dev-armhf - Embedded GNU C Library: ARM hard float development libraries for armel
libc6 - GNU C Library: Shared libraries
libc6-dbg-armel-cross - GNU C Library: detached debugging symbols (for cross-compiling)
libc6-armel-armhf-cross - Dummy package to get libc6:armel installed
libc6-armel-cross - GNU C Library: Shared libraries (for cross-compiling)
libc6-armhf-armel-cross - Dummy package to get libc6:armhf installed
libc6-dev-armel-armhf-cross - Dummy package to get libc6-dev:armel installed
libc6-dev-armel-cross - GNU C Library: Development Libraries and Header Files (for cross-compiling)
libc6-dev-armhf-armel-cross - Dummy package to get libc6-dev:armhf installed

Então eu instalei aqueles, começando com libc6-armel-cross :

dpkg -l libc6*
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom                     Version          Architecture     Description
+++-=======================-================-================-===================================================
ii  libc6:amd64             2.23-0ubuntu4    amd64            GNU C Library: Shared libraries
ii  libc6:i386              2.23-0ubuntu4    i386             GNU C Library: Shared libraries
un  libc6-amd64             <aucune>         <aucune>         (aucune description n'est disponible)
un  libc6-armel-armel-cross <aucune>         <aucune>         (aucune description n'est disponible)
ii  libc6-armel-armhf-cross 2.23-0ubuntu3cro all              Dummy package to get libc6:armel installed
ii  libc6-armel-cross       2.23-0ubuntu3cro all              GNU C Library: Shared libraries (for cross-compilin
un  libc6-armel-dcv1        <aucune>         <aucune>         (aucune description n'est disponible)
ii  libc6-armhf-armel-cross 2.23-0ubuntu3cro all              Dummy package to get libc6:armhf installed
un  libc6-armhf-armhf-cross <aucune>         <aucune>         (aucune description n'est disponible)
ii  libc6-armhf-cross       2.23-0ubuntu3cro all              GNU C Library: Shared libraries (for cross-compilin
un  libc6-armhf-dcv1        <aucune>         <aucune>         (aucune description n'est disponible)
ii  libc6-dbg:amd64         2.23-0ubuntu4    amd64            GNU C Library: detached debugging symbols
ii  libc6-dbg-armel-cross   2.23-0ubuntu3cro all              GNU C Library: detached debugging symbols (for cros
un  libc6-dbg-armel-dcv1    <aucune>         <aucune>         (aucune description n'est disponible)
ii  libc6-dev:amd64         2.23-0ubuntu4    amd64            GNU C Library: Development Libraries and Header Fil
un  libc6-dev-armel-armel-c <aucune>         <aucune>         (aucune description n'est disponible)
ii  libc6-dev-armel-armhf-c 2.23-0ubuntu3cro all              Dummy package to get libc6-dev:armel installed
ii  libc6-dev-armel-cross   2.23-0ubuntu3cro all              GNU C Library: Development Libraries and Header Fil
un  libc6-dev-armel-dcv1    <aucune>         <aucune>         (aucune description n'est disponible)
ii  libc6-dev-armhf-armel-c 2.23-0ubuntu3cro all              Dummy package to get libc6-dev:armhf installed
un  libc6-dev-armhf-armhf-c <aucune>         <aucune>         (aucune description n'est disponible)
ii  libc6-dev-armhf-cross   2.23-0ubuntu3cro all              GNU C Library: Development Libraries and Header Fil
un  libc6-dev-armhf-dcv1    <aucune>         <aucune>         (aucune description n'est disponible)
un  libc6-dev-i386          <aucune>         <aucune>         (aucune description n'est disponible)
ii  libc6-i386              2.23-0ubuntu4    amd64            GNU C Library: 32-bit shared libraries for AMD64
un  libc6-i686              <aucune>         <aucune>         (aucune description n'est disponible)
un  libc6-xen               <aucune>         <aucune>         (aucune description n'est disponible)
un  libc6.1                 <aucune>         <aucune>         (aucune description n'est disponible)
un  libc6.1-dev             <aucune>         <aucune>         (aucune description n'est disponible)
un  libc6.1-dev-armel-cross <aucune>         <aucune>         (aucune description n'est disponible)
un  libc6.1-dev-armhf-cross <aucune>         <aucune>         (aucune description n'est disponible)

A maioria desses pacotes, mas libc6-armel-cross, provavelmente são inúteis ... Na verdade, dpkg -L libc6-armel-cross mostra /usr/arm-linux-gnueabi/lib/libc.so.6 . No entanto, o libusb, as instalações do libusb-dev ainda falham, e o libphidget's também configura.

    
por luneart 21.11.2016 / 15:35

1 resposta

3

O Multiarch só funciona se você permanecer na mesma distribuição, porque as bibliotecas instaladas precisam corresponder exatamente. É por isso que não é possível instalar o Precise libusb em seu sistema não-Precise: ele precisa de libc6:armel , mas isso não pode corresponder ao nativo libc6 que você instalou ...

Como eu vejo, você tem duas soluções "limpas":

  • use multiarch em uma distribuição onde armel ainda é suportado ( cough Debian cough );
  • cruz-build libusb para armel mesmo, usando o armel cross-toolchain que é embalado em Ubuntu ( que é o que você encontrou com libc6-armel-cross etc.).

Como alternativa, você pode copiar as bibliotecas de destino do sistema de destino e apontar sua compilação para elas. Você deve usar os cabeçalhos do seu sistema para libusb (mas não para libc6 ).

    
por 21.11.2016 / 16:25