*buntu multiarch:用于armel的libusb-dev和libusb

*buntu multiarch:用于armel的libusb-dev和libusb

我想为Phidg​​et的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!

我尝试过的:

我有适合我的 arch (amd64) 的库,并且我尝试为 armel 安装。我通过 dpkg 添加了 arch

$ 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 上搜索,我发现这些包和 arch 位于 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

多架构仅在您使用同一发行版时才有效,因为安装的库必须完全匹配。这就是为什么您无法libusb在非 Precise 系统上安装 Precise :它需要 ,但这与您安装的libc6:armel本机不匹配...libc6

在我看来,你有两个“干净”的解决方案:

  • armel在仍然支持的发行版上使用多架构(咳嗽德班咳嗽);
  • libusb为自己交叉构建armel,使用armel 跨工具链它是在 Ubuntu 中打包的(这是你在其他地方找到的libc6-armel-cross)。

或者,您可以从目标系统复制目标库并将您的构建指向这些库。您应该避免使用系统的标头libusb(但不能使用libc6)。

相关内容