*buntu multiarch: armel용 libusb-dev 및 libusb

*buntu multiarch: armel용 libusb-dev 및 libusb

Phidget의 SBC에 대한 크로스 컴파일 환경을 설정하고 싶습니다. libphidget에는 libusb-1.0-0 및 libusb-1.0-0-dev가 필요하지만 현재는 찾을 수 없습니다.

~/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!

내가 시도한 것:

내 아치용 라이브러리(amd64)가 있고 armel용으로 설치하려고 했습니다. 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";

그런 다음 소스를 추가하고(launchpad.net에서 검색하여 이러한 패키지와 아치가 Precise에 있음을 발견했습니다 deb [arch=armel,armhf] http://ports.ubuntu.com/ubuntu-ports precise main universe.) 마지막으로 저장소를 통해 설치를 시도합니다.

$ 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 ».

armel의 libc6 종속성이 누락되었기 때문에 아무 것도 설치하지 않습니다. 하지만 해당 종속성을 해결해야 합니다. libc6용 크로스 패키지를 찾으려고 합니다. (먼저 libusb 크로스 패키지를 검색했지만 찾을 수 없었습니다.)

$ 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

그런 다음 다음부터 시작하여 이것을 설치했습니다 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)

libc6-armel-cross를 제외하면 대부분의 패키지는 아마도 쓸모가 없을 것입니다. 실제로는 dpkg -L libc6-armel-cross가 표시됩니다 /usr/arm-linux-gnueabi/lib/libc.so.6. 그러나 libusb 및 libusb-dev 설치는 여전히 실패했고, libphidget 구성도 실패했습니다.

답변1

설치된 라이브러리가 정확히 일치해야 하므로 다중 아키텍처는 동일한 배포판을 사용하는 경우에만 작동합니다. 이것이 Precise가 아닌 시스템에 Precise를 설치할 수 없는 이유입니다 libusb. 그래야 하지만 libc6:armel기본적으로 설치한 시스템과 일치하지 않습니다.libc6

두 가지 "깨끗한" 솔루션이 있는 것 같습니다.

  • armel아직 지원되는 배포판에서는 멀티 아키텍처를 사용하세요(기침더반기침);
  • libusb자신을 교차 구축하려면 armel다음을 사용하십시오.armel 크로스 툴 체인Ubuntu에 패키지되어 있습니다(다른 곳에서도 찾을 수 있음 libc6-armel-cross).

또는 대상 시스템에서 대상 라이브러리를 복사하고 빌드가 해당 라이브러리를 가리키도록 할 수 있습니다. 시스템 헤더의 사용을 피해야 합니다 libusb(그러나 사용하지 마십시오 libc6).

관련 정보