在Linux上分发软件时的库依赖关系?

时间:2017-08-18 11:07:22

标签: c++ linux

我试图为一款Qt软件做一个Linux版本,但我是一个无知的Linux新手。我已经使用静态链接的Qt库构建了我的应用程序,并制作了.deb和.rpm软件包,但是当我测试它们时,我收到有关某些发行版中缺少库的警告。例如,我的.deb版本在Debian和Ubuntu上运行良好,但由于缺少库,它不会在Linux Mint KDE上启动。运行ldd我发现有四个缺少的库:

libpng16.so.16 => not found
libicui18n.so.57 => not found
libicuuc.so.57 => not found
libicudata.so.57 => not found

显然,我需要以某种方式确保所有必需的库都存在,但是所需的库列表似乎有所不同。例如,Linux Mint Cinnamon列出了33个库,而Ubuntu Unity列出了34个(libpng12.so.0是额外的一个)。我还假设其中一些库是所有发行版附带的标准Linux库,因此我不需要包含它们。

我真的不知道自己在做什么,所以有几个问题:

确定我需要包含在.deb和.rpm包中的库列表的最佳方法是什么?如果ldd是最好的选择,我是否需要包含所有列出的库,或者是否有一些与所有Debian / rpm分发标准捆绑在一起?

包含这些库的最佳方法是什么?您是将它们包含在包中还是在依赖列表中指定它们?

任何其他一般性建议都会受到赞赏,因为我并不确定我是否正确地做到这一点。

感谢。

1 个答案:

答案 0 :(得分:1)

不要考虑依赖关系;想一想依赖。

创建(deb,rpm)包时,可以列出其依赖的其他包。找出哪个包中包含所需的库,并将该包作为依赖项添加。

然后,当用户安装您的软件包时,如果需要,他们的软件包管理器也会安装它所依赖的软件包。 Presto:你有你需要的库。

相关问题