因为如果我要在程序中使用插件,我还没有找到静态链接程序(c++ 中的 writteln)的正确方法(链接器警告 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.6
或libstdc++.so.6
;避免分发它们的主要原因是您的用户(在他的系统上安装您的拷贝)很可能会在他自己的系统上弄得一团糟(这可能会破坏其他现有程序,这会让您的用户生气)。当然,如果您选择(在我看来是错误的)分发它们,您必须遵守他们的许可证。但是您的用户已经拥有它们,通过重新分发它们,您增加了出现大困惑的可能性。因此,只需提供程序的二进制可执行文件(适当打包),而不需要它所需的系统库。
所有包管理器(和包格式)都处理依赖关系(对其他包),因此将安装例如libstdc++.so.6
在极少数情况下用户的系统还没有它。