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

Nic*_*ick 1 c++ linux licensing libraries

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

libc.so.6
libdl.so.2
libgcc_s.so.1
libm.so.6
libstdc++.so.6
Run Code Online (Sandbox Code Playgroud)

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

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path to program directory>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bas*_*tch 5

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

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

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

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

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

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