我的程序依赖于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.我是否遵循了正确的方法,或者我错过了什么。
答案 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或行为都已更改。您需要使用新库再次编译软件,对代码进行必要的更改,然后对其进行测试并修复问题。
进一步推荐阅读: