0

我有一个依赖于 libcurl.so、libsqlite3.so、libcrypto.so 和 libpthread.so 的程序

Package: myscript
Version: 0.1
Section: utils
Priority: optional
Architecture: all
Essential: no
Depends: curl | libcurl3, sqlite3 | libsqlite3-0, libcrypto++9 | libk5crypto3
Maintainer: Your Name
Description: Sample Program

我的查询是, 1. 我想在控制文件中添加 libpthread 依赖项。我的机器(linuxmint-17)有一个名为 libthread.so.10 的文件。但是当我在做 dpkg --get-selections 时,我没有得到任何包含 pthread 的包。这是 linuxmint(17) 的全新安装,我没有手动安装任何软件包。2.我将如何确保这将起作用,让我们说将来是否会出现 libcurl4 或 libcrypto++99。我是按照正确的方法还是我错过了什么。

4

1 回答 1

1

首先,请阅读有关控制文件的 Debian 文档

您需要在debian/control文件中指定的是-devsection 中的包Source。在Package您描述在大多数情况下生成的二进制包的部分中,行Depends: ${shlibs:Depends}, ${misc:Depends}就足够了。确保dh_shlibdeps运行debian/rules。据我所知dh_make,为您提供了这些内容 - 请查看dh_make文档。

.so了解带扩展名的库之间的区别.so.some.numbers.here这里提供了很好的解释。

所以,debian/control你应该有一个源包部分:

来源:packagename Build-Depends:packages-dev, other-packages-needed-for-build [其他字段]

以及从此源构建的二进制包的一个或多个部分:

包:packagename 依赖:${shlibs:Depends}, ${misc:Depends} [其他字段]

如何确定要放入 Build-Depends 中的包?如果您需要选项 -lfoo 来成功链接您的软件,这意味着您需要有一个文件 libfoo.so 可用。该-pthread选项隐式添加-lpthread选项。因此,对于 PCRE,您需要有libpcre.so文件,对于 pthreads - libpthread.so。建立名称后,将dpkg -S所有这些文件名作为参数运行。您可能希望grep结果只获得 .so 文件,而不是 .so.something。

arturcz@szczaw:~$ dpkg -S libpcre.so libpthread.so | grep '\.so$'
libpcre3-dev:amd64: /usr/lib/x86_64-linux-gnu/libpcre.so
libc6-dev:amd64: /usr/lib/x86_64-linux-gnu/libpthread.so

因此,您想要作为 Build-Dependencies 的包名称是:libc6-dev 和 libpcre3-dev。然而,另一个规则是在 Debian 中使用。有些包被认为是构建必需的,您不需要将它们放入 Build-Dependencies 中。libc6-dev 就是其中之一。如果您正确地对您的软件进行了 debianized,${shlibs:Depends}, ${misc:Depends}则将被适当的内容所取代。

我将如何确保这将起作用,让我们说将来是否会出现 libcurl4 或 libcrypto++99。我是在遵循正确的方法还是遗漏了什么。

你不会的。如果库的 SONAME 中的主编号发生了变化,则意味着两个库的 API 或行为都发生了变化。您需要使用新库再次编译您的软件,对代码进行必要的更改,然后对其进行测试并修复问题。

进一步推荐阅读:

于 2017-06-08T08:57:17.103 回答