我对开源和许可证有基本的了解问题。有人可以为下面的场景澄清一些问题。对不起,如果它是非常基本的
我正在编写一个专有软件,我计划使用一些开源库。我还需要glibc和C编译器,但不想使用我操作系统中的默认gcc工具链,所以使用crosstools-ng构建我自己的工具
现在在ct-ng中,我想libstdc ++库是静态链接的(对于c ++而言我不会在大多数情况下使用它我猜)但是从我的工具链配置是我的libc静态或动态联系?如果是这种情况,鉴于glibc是LGPL,并且我可以将其链接到我的专有软件,这种静态链接是否会导致任何问题给我许可?我的软件仍然可以近距离获取吗?或者我必须释放编译的对象。
我的工具链配置如下所示,如果glibc静态或动态链接,有人可以指向我吗?
Target: x86_64-some-linux-gnu
Configured with: /home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/src/gcc-4.4.7/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=x86_64-some-linux-gnu --prefix=/home/balravin/tools/platform/x86/obj/gnu/gcc/4.4.7/x86_64-some-linux-gnu --with-sysroot=/home/balravin/tools/platform/x86/obj/gnu/gcc/4.4.7/x86_64-some-linux-gnu/x86_64-some-linux-gnu/sysroot --enable-languages=c,c++,fortran --with-pkgversion='crosstool-NG 1.15.3' --disable-sjlj-exceptions --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --with-gmp=/home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/x86_64-some-linux-gnu/buildtools --with-mpfr=/home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/x86_64-some-linux-gnu/buildtools --with-ppl=/home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/x86_64-some-linux-gnu/buildtools --with-cloog=/home/balravin/tools/platform/x86/src/gnu/gcc/4.4.7/.build/x86_64-some-linux-gnu/buildtools --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --with-long-double-128 --disable-multilib --with-local-prefix=/home/balravin/tools/platform/x86/obj/gnu/gcc/4.4.7/x86_64-some-linux-gnu/x86_64-some-linux-gnu/sysroot --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.4.7 (crosstool-NG 1.15.3)
答案 0 :(得分:9)
使libc.so
动态链接的原因有很多,包括法律和技术原因。
在法律方面,GNU libc的LGPL许可要求您允许用户增强其libc;因此,如果您销售静态链接的专有软件(技术上不好的想法),您需要为您的用户提供重新链接到更好的libc版本的方法;具体而言,您可能还需要提供软件的*.o
对象。
在技术方面,所有功能都需要动态链接libc.so
,间接利用libdl.so
或ld.so
-i.e.使用动态链接 - 特别是NSS相关功能(如getpwent
和getaddrinfo
以及其他许多功能,请参阅nsswitch.conf(5)& nss(5))。此外,动态链接libc效率更高(使用libc.so
的所有进程几乎共享RAM,并且可执行文件的大小更小;最重要的是,升级libc.so
更容易。)