【问题标题】:Embedded systems: static or dynamic linking嵌入式系统:静态或动态链接
【发布时间】:2015-06-05 20:57:16
【问题描述】:

对于程序在微控制器上独立运行的嵌入式系统:

程序是否总是静态链接?或者在某些情况下它可能是动态链接的?

【问题讨论】:

标签: c embedded


【解决方案1】:

来自Wikipedia

动态链接器是操作系统的一部分,用于加载和 链接可执行文件执行时所需的共享库 (在“运行时”),通过从持久性复制库的内容 存储到 RAM,填充跳转表和重定位指针。

因此,这意味着只有在以下情况下才可能进行动态链接:
1) 你有某种操作系统
2) 你有某种持久性存储/文件系统。

在裸机微机上通常情况并非如此。

【讨论】:

    【解决方案2】:

    简单地说:如果有像 Linux 这样成熟的操作系统在微控制器上运行,那么动态链接是可能的(并且很常见)。

    如果没有这样的操作系统,您很可能会使用静态链接。为此,链接器将(基本上)不仅链接模块和库,还包括由 OS 程序加载器完成的功能。

    让我们暂时停留在这些(较小的)嵌入式系统上。

    除了静态或动态链接外,链接器还进行重定位。这确实 - 简单地说 - 将程序的内部(相对)地址更改为目标设备上的绝对地址。

    【讨论】:

      【解决方案3】:

      它在简单的嵌入式系统上并不常见,主要是因为操作系统(如果有的话)既不需要也不支持它。动态链接意味着一定数量的运行时操作系统支持。

      嵌入式系统 RTOS VxWorks 支持动态链接,因为它可以在运行时从网络或文件系统加载和链接部分链接的目标代码。类似地,较大的嵌入式 RTOS(如 QNX)支持动态链接,嵌入式 Linux 也是如此。

      所以是的,大型嵌入式系统可能支持动态链接。在许多情况下,它主要用作将 LGPL 许可代码链接到封闭源应用程序的一种方式。它还可以用作简化和最小化部署更改和更新到大型系统的影响的一种方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-25
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        相关资源
        最近更新 更多