我可以用我系统的共享库提供程序的linux二进制文件吗?

时间:2011-12-18 18:58:42

标签: c++ linux licensing libraries

我还没有找到一种正确的方法来静态链接程序(在c ++中的writteln),如果我要在其中使用插件(链接器警告dlopen在运行时需要glibc共享库)。此外,我无法为当前的大多数Linux分发构建动态链接的二进制文件,因此我可以仅分发源代码,或者尝试通过ldd分发二进制文件以及我的系统中的共享库,例如:< / p>

libc.so.6
libdl.so.2
libgcc_s.so.1
libm.so.6
libstdc++.so.6

因为我认为要求用户更容易添加到.bash_profile

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path to program directory>

而不是从头开始编译程序和插件。

所以,首先,我是否正确,我可以自由地重新分发这些库,因为它们是在GNU LGPL下获得许可的?

这样做是否有意义,程序是否会在大多数Linux发行版及其版本中正确运行?

2 个答案:

答案 0 :(得分:5)

分发二进制文件的最佳方法是使用免费许可证(如GPL)以源代码形式发布您的程序;然后,分销商(和贡献者)最终会将您的程序打包进行分发(而且您不必为此烦恼)。

否则,您可以为一些主要的Linux发行版分发二进制包(例如,.deb用于Debian或Ubuntu,.rpm用于Redhat或Centos或Mandriva)。

一些非自由软件(如用于驱动ATI图形卡的AMD / ATI Catalyst fglrx )以生成适当二进制包的形式(在最终用户计算机上)分发。

您提到的所有库都可以在每个标准不太旧的Linux发行版中使用。您不需要分发它们,只需提及您需要它们(并提供它们的精确列表及其版本号)。

我真的避免[重新]分发系统库,例如libc.so.6libstdc++.so.6;避免分发它们的主要原因是你的用户(在他的系统上安装你的副本)很可能会在他自己的系统上造成大麻烦(这可能会破坏其他现有的程序,这将使你的用户生气)。当然,如果您选择(我认为错误)分发它们,您必须遵守其许可证。但是你的用户已经拥有它们,并且通过重新分发它们,你增加了大乱的可能性。因此,只需提供程序的二进制可执行文件(适当打包),而不需要它所需的系统库。

所有包管理器(和包格式)都处理依赖关系(在其他包上),因此将安装例如: libstdc++.so.6在极少数情况下用户的系统尚未拥有它。

答案 1 :(得分:1)

您不应该重新分发这5个库,因为大多数现代Linux系统已经可以使用它们。如果你决定重新分配它们,你也需要提供它们的来源;阅读LGPL(或摘要)了解详情。