7

我有一些使用 udev 库接收热插拔事件的示例 C++ 代码。它在 Ubuntu 10.04 中运行良好。唯一的先决条件是 libudev-dev 包: sudo apt-get install libudev-dev

但是当我尝试在 12.04 中安装该软件包时,我得到:

sudo apt-get install libudev-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
libudev-dev : Depends: libudev0 (= 175-0ubuntu9) but 175-0ubuntu9.3 is to be installed
E: Unable to correct problems, you have held broken packages.

这似乎暗示我应该安装libudev0,所以:

sudo apt-get install libudev0
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libudev0 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

我不知道如何从这里开始。libudev-dev 依赖于libudev0,但它已经到位,所以......下一步是什么?

请注意,sources.list 中未注释以下存储库,并且我已经完成了 apt-get 更新:

deb http://us.archive.ubuntu.com/ubuntu/ precise main restricted    
deb-src http://us.archive.ubuntu.com/ubuntu/ precise main restricted
deb http://us.archive.ubuntu.com/ubuntu/ precise universe
deb-src http://us.archive.ubuntu.com/ubuntu/ precise universe

一些网站表明我应该做-f:

sudo apt-get -f install 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

在这里找到了一个很好的链接: https ://askubuntu.com/questions/140246/how-do-i-resolve-unmet-dependencies 但不高兴。

谷歌说这对其他人来说是一个灌篮......

感谢您对此的任何帮助,约翰

4

3 回答 3

14

这是解决方案。

当您阅读以下内容时:

The following packages have unmet dependencies:
libudev-dev : Depends: libudev0 (= 175-0ubuntu9) but 175-0ubuntu9.3 is to be installed
E: Unable to correct problems, you have held broken packages.

这意味着我尝试安装的 libudev-dev 包取决于包:

libudev0 version 175-0ubuntu9

(这就是“ (= 175-0ubuntu9) ”想要表达的意思)

但是已经安装了libudev0 175-0ubuntu9.3 版本。

(这就是“但要安装 175-0ubuntu9.3 ”的意思)。

换句话说:

  • 已经安装了较新版本的libudev0。
  • 我要安装的libudev-dev 软件包依赖于旧版本的libudev0,并且它已经安装了。
  • 这反过来意味着我正在安装 libudev-dev 的存储库已过时。

您可以通过以下方式找到当前在 /etc/apt/sources.list 中列出的所有存储库中可用的软件包:

sudo apt-cache madison libudev-dev
sudo apt-cache madison libudev0

所以最后我们解决了真正的问题!我在sources.list 中的存储库列表缺少包含libudev-dev 175-0ubuntu9.3 的存储库。

要解决这个问题:

  1. 转到http://packages.ubuntu.com并搜索“libudev-dev”

  2. 在结果列表中找到 Precise Pangolin (ubuntu 12.04) 的 175-0ubuntu9.3。在这种情况下,该版本处于“精确更新”之下。您可以点击链接:

    http://packages.ubuntu.com/precise-updates/libudev-dev

    它显示了您想了解的有关 libudev-dev 的所有信息。除了它没有显示我应该使用的确切回购网址!所以我要稍微猜测一下...

  3. 将 repos 添加到 apt

    sudo gedit /etc/apt/sources.list
    [ add these two repos ]
    deb http://us.archive.ubuntu.com/ubuntu/ precise-updates main    
    deb-src http://us.archive.ubuntu.com/ubuntu/ precise-updates main
    
  4. 刷新

    sudo apt-get update
    sudo apt-cache madison libudev-dev
    [you should see libudev-dev 175-0ubuntu9.3 in the output]
    libudev-dev | 175-0ubuntu9.3 | http://us.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
    
  5. 安装软件包:

    sudo apt-get install libudev-dev
    

    这就像一个魅力!

约翰

于 2013-06-21T00:28:11.793 回答
1

没有。不像魅力。

@ubuntu:~$ sudo apt-cache madison libudev-dev

libudev-开发 | 175-0ubuntu9.8 | http://archive.ubuntu.com/ubuntu/precision-updates/main amd64 包

libudev-开发 | 175-0ubuntu9.8 | http://us.archive.ubuntu.com/ubuntu/precision-updates/main amd64 包

ubuntu:~$ sudo apt-get install libudev-dev

Paketlisten werden gelesen... Fertig

Abhängigkeitsbaum wird aufgebaut

Statusinformationen werden eingelesen... Fertig

libudev-dev ist schon die neueste 版本。

Probieren Sie »apt-get -f install«, um dies zu korrigieren:

Die folgenden Pakete haben unerfüllte Abhängigkeiten:

libudev-dev : Hängt ab von: libudev0 (= 175-0ubuntu9.8) aber 175-0ubuntu9 soll installiert werden

libudev0:Beschädigt:libudev0:i386 (!= 175-0ubuntu9) aber 175-0ubuntu9.8 soll installiert werden

libudev0:i386 : Beschädigt: libudev0 (!= 175-0ubuntu9.8) aber 175-0ubuntu9 soll installiert werden

E: Unerfüllte Abhängigkeiten。Versuchen Sie »apt-get -f install« ohne Angabe eines Pakets (oder geben Sie eine Lösung an)。

这做到了

apt-get 下载libudev0 libudev0:i386

sudo dpkg -i libudev0_*.deb

sudo apt-get 升级

于 2015-01-23T19:26:58.113 回答
0

这对我有用:

  1. sudo apt-mark 持有 libudev0:i386
  2. sudo apt-mark 持有libudev0
  3. sudo apt-get 升级
  4. 然后我进入突触并标记libudev进行升级(可能也可以通过命令行工作。只是不是我怎么做的)
于 2015-05-05T18:22:38.060 回答