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

Could I supply linux binaries of my program with shared libraries of my system?

本文关键字:我的 共享 系统 linux 程序 我可以 二进制文件      更新时间:2023-10-16

因为我还没有找到一种合适的方法来静态地链接程序(用c++编写),如果我要在其中使用插件(链接器警告dlopen在运行时需要glibc共享库)。此外,目前我不能为大多数linux发行版构建动态链接的二进制文件,所以我可以只分发源代码或尝试分发二进制文件以及ldd在我的系统中发现的共享库,例如:

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发行版和它的版本中正确运行吗?

分发二进制文件的最佳方式是以自由许可证(如GPL)的源代码形式发布程序;然后发布者(和贡献者)最终会为他们的发布打包你的程序(你不必为此烦恼)。

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

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

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

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

所有的包管理器(和包格式)都处理依赖关系(在其他包上),所以在极少数情况下,当用户的系统还没有libstdc++.so.6时,会安装它。

您不应该重新分发这5个库,因为大多数现代Linux系统已经提供了它们。如果你决定不顾一切地重新发布它们,你还需要提供它们的源代码;详细信息请阅读LGPL(或摘要)。