我已经关注了本指南在我的 Ubuntu 12.04 上禁用鼠标中键粘贴。
奇迹般有效。
现在我正试图在我的 Linux Mint 17 上实现同样的目标。当我尝试
sudo apt-get build-dep libgtk2.0-0
它给了我以下输出:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Picking 'gtk+2.0' as source package instead of 'libgtk2.0-0'
E: Unable to find a source package for gtk+2.0
对我来说, apt-get 似乎以某种方式“解析”'libgtk2.0-0'
为'gtk+2.0'
,但随后找不到任何类似名称的包。
编辑:虽然我现在能够编译程序(请参阅我的答案),但我仍然不知道 Picking 'gtk+2.0' as source package instead of 'libgtk2.0-0'
是什么意思。任何对此的见解将不胜感激,谢谢!
答案1
正如其他人已经指出的那样,请确保对于和deb …
中的每个条目,您都有一个匹配的条目。该行的其余部分必须相同。/etc/apt/sources.list
/etc/apt/sources.list.d/*
deb-src …
该deb
条目用于二进制包(即准备安装),该deb-src
条目用于源包(即准备编译)。之所以将这两种包分开,是因为它们的管理方式非常不同:二进制包具有依赖性跟踪机制和当前安装的列表,而源包仅被跟踪以便可以方便地下载。请注意,在讨论包存储库时,这个词来源意味着两个不相关的东西:一个是下载包的位置中的源,另一个是源包而不是二进制包。
libgtk2.0-0
是二进制包的名称。它是从一个名为 的源包构建的gtk+2.0
。源代码包和二进制包名称并不总是匹配的原因是构建源代码包可能会生成多个二进制包;例如,gtk+2.0
是 14 个包的源代码,因为它分为两个库 ( libgtk2.0
、libgail
)、使用这些库构建程序的相应包 ( …-dev
)、开发人员文档 ( …-doc
)、配套程序 ( libgtk2.0-bin
) 等。
您可以通过检查(如果安装了该包)或 的Source: …
输出中的行来查看二进制包对应的源包名称。dpkg -s BINARY_PACKAGE_NAME
apt-cache show BINARY_PACKAGE_NAME
您可以列出由源包生成的二进制包aptitude search '?source-package(^SOURCE_PACKAGE_NAME$)
。
该命令apt-get source
下载源码包。如果您给它的参数不是已知的源包,它会在可安装的二进制包的数据库中查找它并尝试下载相应的源包。
该命令apt-get build-dep
按照相同的方法推导源包的名称,然后查询源包数据库以获取二进制包列表(字段中的列表Build-Dep:
),并安装这些二进制包。
软件源 GUI 有一个针对官方存储库的“启用带有源代码的存储库”复选框,请确保选中它。如果您手动添加第三方存储库,请确保同时添加deb-src
和deb
行。
答案2
命令行方式
sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
sudo apt-get update
在 Ubuntu 18.04 Docker 镜像上进行了测试。进行此更改后,我可以成功执行以下操作:
sudo apt-get build-dep hello
在更改之前,它失败并出现错误:
E: You must put some 'source' URIs in your sources.list
software-properties-gtk
选项“源代码”
从 GUI 中,您可以运行:
software-properties-gtk
然后在“Ubuntu软件”选项卡下单击“源代码”:
这已经添加了一些deb-src
行/etc/apt/sources.list
,现在我可以做sudo apt-get build-dep <package>
。
在 Ubuntu 16.04 至 18.04 上测试。
答案3
感谢@steeldriver,我知道该怎么做了。
只需将以下 ling 添加到我的/etc/apt/sources.list
:
deb-src ftp://ftp.de.debian.org/debian/ stable main contrib
deb-src 存储库包含编译所需的源包(而不是二进制的、可立即安装的包)。
编辑:添加此后,您必须执行sudo apt-get update