Debian控制文件依赖于一个程序,它依赖于libcurl.so,libsqlite3.so,libcrypto.so和libpthread.so

时间:2017-06-08 07:22:19

标签: debian pthreads shared-libraries libcurl libcrypto

我的程序依赖于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.我是否遵循了正确的方法,或者我错过了什么。

1 个答案:

答案 0 :(得分:1)

首先,请阅读Debian documentation about control file

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

了解具有.so.so.some.numbers.here扩展的库之间的区别。提供了很好的解释here

因此,在debian/control中,您应该有一个源包部分:

来源:packagename    Build-Depends:package-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 essential,您无需将它们放入Build-Dependencies中。 libc6-dev就是其中一个软件包。如果您对软件进行了适当的软件化处理,${shlibs:Depends}, ${misc:Depends}将替换为适当的内容。

  

我将如何确保这一点有效,请告诉我们将来是否存在libcurl4或libcrypto ++ 99.我是否遵循了正确的方法,或者我错过了什么。

你没赢。如果在库的SONAME中更改了主要编号,则表示两个库的API或行为都已更改。您需要使用新库再次编译软件,对代码进行必要的更改,然后对其进行测试并修复问题。

进一步推荐阅读: