如果我们在R脚本中导入一个模块并使用它的函数,它是静态链接还是动态链接?问这个问题是因为我们的法律的部门想了解我们使用开源库时使用的链接类型。链接的类型对于遵守某些开放源码使用准则显然很重要。
s3fp2yjn1#
静态链接和动态链接是通常用于 * 编译 * 语言(如C、C++和Java)的术语,其中每个实现文件首先由 * 编译器 * 构建到对象文件中。然后,这些单独的编译单元需要通过专用的链接器 * 链接 * 以生成完整的程序。如果您用来生成对象文件的一些代码来自外部库,那么您已经 * 静态链接 * 了该库。换句话说,外部软件是“内置”到您自己的软件中的。相反,R是一种解释性语言。使用外部包时,它在运行时加载,并且仅在需要时加载。因此,它总是“动态地”工作。如果你所做的只是编写使用一些免费软件包(例如从CRAN使用install.packages),那么你并没有真正链接 * 任何东西 *,你可以向你的法律的部门保证你没有静态链接任何现有的软件。即使你的R脚本只在其他机器上运行,如果其他机器安装了某些软件包,你的软件也不包含这些软件包。在编写R软件时,唯一可能发生静态链接的情况是,如果您正在编写一个包并专门为其编写编译代码,但如果您正在这样做,那么您已经知道您是否正在编写静态链接代码。
install.packages
1条答案
按热度按时间s3fp2yjn1#
静态链接和动态链接是通常用于 * 编译 * 语言(如C、C++和Java)的术语,其中每个实现文件首先由 * 编译器 * 构建到对象文件中。然后,这些单独的编译单元需要通过专用的链接器 * 链接 * 以生成完整的程序。如果您用来生成对象文件的一些代码来自外部库,那么您已经 * 静态链接 * 了该库。换句话说,外部软件是“内置”到您自己的软件中的。
相反,R是一种解释性语言。使用外部包时,它在运行时加载,并且仅在需要时加载。因此,它总是“动态地”工作。如果你所做的只是编写使用一些免费软件包(例如从CRAN使用
install.packages
),那么你并没有真正链接 * 任何东西 *,你可以向你的法律的部门保证你没有静态链接任何现有的软件。即使你的R脚本只在其他机器上运行,如果其他机器安装了某些软件包,你的软件也不包含这些软件包。
在编写R软件时,唯一可能发生静态链接的情况是,如果您正在编写一个包并专门为其编写编译代码,但如果您正在这样做,那么您已经知道您是否正在编写静态链接代码。