LGPL(GNU Lesser General Public License,较宽松通用公共许可证)对动态链接的要求相对宽松,但仍有明确的条件,以下是核心要求:

-
允许私有使用:如果您的程序通过动态链接方式使用LGPL库,并且您不修改该库本身,您可以按照任何许可证(包括闭源商业许可证)分发您的程序,这是LGPL与GPL的主要区别。
-
必须提供修改库的可能性:即使您只动态链接未修改的库,您仍然需要确保用户能够:
- 获取LGPL库的源码:您必须随程序一起提供或通过书面承诺(如提供CD或下载地址)提供您所使用的LGPL库的完整、对应二进制版本的源代码。
- 允许用户修改并替换库:用户需要有能力用修改后的LGPL库版本替换您程序使用的动态库,这意味着:
- 您的程序必须与修改后的库保持链接兼容(即接口ABI兼容)。
- 您不能使用任何技术手段(如加密、代码混淆、专用加载器等)阻止用户替换动态库。
- 提供必要的编译/链接信息:您可能需要提供编译或链接脚本、Makefile等,以便用户重新编译LGPL库并替换。
-
例外:如果库是“系统库”:如果LGPL库是操作系统标准组件(如glibc、系统自带的libX11),且您动态链接的是用户系统已安装的版本,您通常无需提供该库的源码(因为用户系统已经包含了)。
-
修改LGPL库的情况:如果您修改了LGPL库(无论是静态还是动态链接),则该修改后的库必须以LGPL或GPL许可证发布,并且您必须提供修改后的库的完整源码。
- 动态链接未修改的LGPL库:您的程序可闭源,但必须让用户能获得LGPL库的源码并自由替换它。
- 推荐做法:在您的程序文档或说明中,明确列出所使用的LGPL库的名称、版本以及获取源码的方式(如官网链接或您的直接分发)。
- 风险规避:如果您通过动态链接,但技术手段(如dlopen不完整、加密)阻止了用户替换,则可能违反LGPL第6条(禁止进一步限制用户的权利)。
注意:以上是一般性解释,具体条款请以LGPL第3版(或您使用的版本)的第4条(Combined Works)和第6条(Linking Exception)为准,建议咨询法律专业人士以确保合规。