为什么在使用共享库时,Linux上的App启动速度较慢?

chr*_*mue 1 linux startup shared-libraries

在我正在研究的嵌入式设备上,启动时间是一个重要问题.整个应用程序由几个使用一组库的可执行文件组成.由于FLASH内存空间有限,我们希望使用共享库.

当编译并与共享库链接时,应用程序照常工作,并且FLASH内存量按预期减少.与静态库链接的版本的不同之处在于应用程序的启动时间大约长20秒,我不知道为什么.

该应用程序在ARM9 CPU上以180 MHz运行,具有Linux 2.6.17 OS,16 MB FLASH(JFFS文件系统)和32 MB RAM.

Gle*_*len 7

因为共享库必须在运行时链接,通常是通过dlopen()或类似的东西.静态库没有这样的步骤.

编辑:更多细节.dlopen必须执行以下任务.

  • 找到共享库
  • 将其加载到内存中
  • 递归加载所有依赖项(及其依赖项....)
  • 解决所有符号

这需要完成很多IO操作.

在静态链接程序中,上述所有操作都是在编译时完成的,而不是运行时.因此加载静态链接程序要快得多.

在您的情况下,您的代码必须运行相对较慢的硬件会夸大差异.