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

标签 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

因为我认为更容易要求用户添加到 .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 在极少数情况下用户的系统还没有它。

关于c++ - 我可以为我的程序的 linux 二进制文件提供我系统的共享库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8554015/

相关文章:

linux - 使用 kobject_create_and_add 和 kobject_init_and_add 函数动态创建 kobject 的区别

c - 无限 while 循环中的信号

c++ - 我可以使用 Qt LGPL 许可证并在没有任何限制的情况下出售我的应用程序吗?

ios - 关于iOS版GoogleMaps SDK许可

c++ - 调用扩展类函数

c++ - 确定 uint32_t 的字节顺序

c++ - 如何在 boost::threadpoool 中安排成员函数执行

c - Linux C脚本-显示用户,主机名

c++ - OpenCV Visual Studio ntdll.dll

licensing - 如何在全局范围内识别不同的计算机?