对于程序在微控制器上独立运行的嵌入式系统:
程序是否始终是静态链接的?或者在某些情况下它可能是动态链接的?
答案 0 :(得分:3)
来自Wikipedia:
动态链接器是加载和运行的操作系统的一部分 链接执行时可执行文件所需的共享库 (在“运行时”),通过从持久性中复制库的内容 存储到RAM,填充跳转表和重定位指针。
因此,它意味着只有在以下情况下才能进行动态链接:
1)你有某种操作系统
2)你有一些持久存储/文件系统。
在裸机微电脑上通常情况并非如此。
答案 1 :(得分:3)
简单地说:如果在微控制器上运行像Linux这样的完全成熟的操作系统,那么动态链接是可能的(并且很常见)。
如果没有这样的操作系统,您很可能会使用静态链接。为此,链接器(基本上)不仅链接模块和库,还包括由OS程序加载器完成的功能。
暂时留在这些(较小的)嵌入式系统中。
除了静态或动态链接之外,链接器也会进行重定位。这样做 - 简单地说 - 将程序的内部(相对)地址更改为目标设备上的绝对地址。
答案 2 :(得分:1)
在简单的嵌入式系统上并不常见,主要是因为操作系统既不需要也不支持(如果有的话)。动态链接意味着一定量的运行时操作系统支持。
嵌入式系统RTOS VxWorks支持动态链接,因为它可以在运行时从网络或文件系统加载和链接部分链接的目标代码。类似地,较大的嵌入式RTOS(如QNX)支持动态链接,嵌入式Linux也是如此。
所以大型嵌入式系统可能支持动态链接。在许多情况下,它主要用作将LGPL许可代码链接到封闭源应用程序的方法。它还可以用作简化和最小化对大型系统部署更改和更新的影响的方法。