静态链接glibc和libstdc ++

the*_*ine 21 c++ linux gcc

我正在编写一个不兼容GNU GPL的跨平台应用程序.我目前面临的主要问题是应用程序与glibc和libstdc ++动态链接,几乎每个库的新主要更新都不向后兼容.因此,在我的应用程序中可以看到随机崩溃.

作为一种解决方法,我分发在几个不同系统(具有不同的C/C++运行时版本)上编译的应用程序的二进制文件.但我想没有这个.所以我的问题是,保持许可和一切,我可以静态链接glibc和libstdc ++吗?此外,这会导致rtld出现问题吗?

Vit*_* Py 19

你不需要.

将链接的原始库复制到应用程序文件夹中的目录(本例中为../lib).

喜欢:

my_app_install_path

  1. 的.bin
  2. LIB
  3. 文件

将应用程序重命名为app.bin之类的应用程序.将您的应用替换为一个小的shell脚本,将环境变量LD_LIBRARY_PATH设置为库路径(并连接以前的LD_LIBRARY_PATH内容,如果有的话).现在ld应该能够找到你链接的动态库,而不需要将它们静态编译到你的可执行文件中.

请记住遵守LGPL,将给定的属性添加到库中,并指向可以下载源的文档.


Mat*_*hen 9

glibc隶属于LGPL.根据LGPL 2.1的第6节,您可以分发链接到库的程序,前提是您遵守五个选项之一.第一个是提供库的源代码,以及您自己的程序的目标代码(源是可选的,不是必需的),因此可以与库重新链接.您也可以提供相同的书面报价.您自己的代码不必属于LGPL,您也不必释放源代码.

libstdc ++属于GPL,但有一个主要的例外.您基本上可以根据您选择的许可进行分发,而无需为您自己的代码或libstdc ++提供源代码.唯一的条件是你正常编译,没有例如专有的修改或插件到GCC.

IANAL,如果您需要真正的法律建议,您应该考虑咨询一个.


the*_*ine 9

指定-static-libgcc链接器的选项将导致它链接到C库的静态版本(如果在系统上可用).否则会被忽略.

  • 你还需要`-static-libstdc ++`,见[解释](http://www.trilithium.com/johan/2005/06/static-libstdc/) (8认同)
  • 这是一个*完全*伪造的答案:`-static-libgcc`与系统C库没什么关系*. (7认同)