为什么使用共享库时 Linux 上的应用程序启动速度会变慢?

2023-12-06

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

当编译并与共享库链接时,应用程序照常工作,并且闪存容量按预期减少。 与链接到静态库的版本的区别在于应用程序的启动时间长了大约 20 秒,我不知道为什么。

该应用程序在 180 MHz 的 ARM9 CPU 和 Linux 2.6.17 操作系统上运行, 16 MB 闪存(JFFS 文件系统)和 32 MB RAM。


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

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

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

这需要相当多的IO操作才能完成。

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

就您而言,您的代码必须运行在相对较慢的硬件上,这种差异被夸大了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用共享库时 Linux 上的应用程序启动速度会变慢? 的相关文章

  • 找出Linux上一个进程使用了​​多少内存页

    我需要找出进程分配了多少内存页 每个页面是 4096 进程内存使用情况我在查找正确值时遇到一些问题 当我查看 gome system monitor 时 内存映射下有几个值可供选择 Thanks 这样做的目的是将内存使用量除以页数并验证页大
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • 如何在Linux上用C/C++编写Web服务器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑在 Linux 平台上开发一个小型 阅读 初级 Web 服务器 但我不知道从哪里开始 我希望它能够做的是 监听特定端口 接受
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 在 scapy 中通过物理环回发送数据包

    我最近发现了 Scapy 它看起来很棒 我正在尝试查看 NIC 上物理环回模块 存根上的简单流量 但是 Scapy sniff 没有给出任何结果 我正在做的发送数据包是 payload data 10 snf sniff filter ic
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • Python glob,操作系统,相对路径,将文件名放入列表中[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个目录中所有文件的列表 其中文件名以 root 结尾 在阅读了论坛中的一些文章后 我尝试使用 glob 和 os listdir 的基本策略 但我都遇到了麻烦 首先 当我使用 import glo
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐

  • Visual Studio 2019 中的 Control C++ 标准修订版

    所以我在我的C 项目中使用Visual Studio 2019 我想在编译时控制C 版本 我已将其从 项目 gt 属性 gt C C gt 语言 gt C 语言标准 gt 更改为 当时是在Default ISO C 14 Standard
  • Handsontable 保存公式值

    我想将 Handsontable 集成到我的网站 但是有一个问题 当我尝试保存由 RuleJS 公式支持 创建的数据时 脚本给我一个公式 例如 A1 B1 我试图获得简单数学乘以价格和货币的结果 如何保存表值 而不是从源中保存 workig
  • Carrierwave:filename/store_dir 中的文件哈希和模型 ID

    我在 Rails 4 项目中使用 Carrierwave 其中文件存储用于开发和测试 雾存储 用于存储在 Amazon S3 上 用于生产 我想用这样的路径保存我的文件 model class name part of hash anoth
  • 程序集:文件描述符0或2用于读取用户输入

    我正在学习汇编 并且有不同的文件描述符用于读取用户输入 为了读取键盘输入 我期待文件描述符 0 stdin 但遇到了这个article其中使用了文件描述符 2 stderr Read and store the user input mov
  • 如何在intellij idea中做netbeans的“制作控制器”

    我使用 netbeans 来制作 javafx 应用程序 在 scenebuilder 中更改一些内容并保存到 fxml 后 我切换到 netbeans 右键单击 fxml 并选择 制作控制器 在控制器类中添加或删除一些代码 现在我切换到i
  • 从先序和中序列表重建二叉树

    嗨 我正在尝试重建一棵二叉树 我几乎得到了它 但它抛出了一个错误 我不知道为什么 buildTree Ord a Eq a gt a gt a gt Tree a buildTree Empty buildTree preOrd inOrd
  • RestTemplate 与 ClientHttpRequestInterceptor 会导致 GZIP 压缩两次

    我正在使用 ClientHttpRequestInterceptor 向 Android 项目中 RestTemplate 发出的每个请求添加基本授权标头 我还通过将 Content Encoding 标头设置为 gzip 来压缩请求正文
  • iPhone 上视频之上的 OpenGL 层?

    我正在尝试在 iPhone 上显示全屏视频并用 OpenGL ES 视图覆盖它 基本上 我想要在后台播放视频 同时在其上绘制 OpenGL 图形 我如何实现这一目标 这可能吗 感谢您的帮助 Florian 要使用自定义叠加视图显示摄像头视频
  • 使用 PHP 检测图像中的主要颜色

    我正在尝试复制 Dribbble com 检测图像中主要颜色的功能 在下图中 您可以看到来自 Dribbble com 的屏幕截图 其中显示了左侧图像中的 8 种主要颜色 这是图像中的实际页面http dribbble com shots
  • 刚接触 swift,我的程序按打开就会崩溃

    我在模拟器上按 打开 程序崩溃 并显示侧面板和底部按 打开 会向右滑动并显示 3 个对象 Hello Second World 您的程序崩溃是因为您在代码中添加了断点 如下所示 您可以通过以下方式将其拖到一边来删除所有内容 对所有断点执行相
  • Android ART 运行时是否具有与 Dalvik 相同的方法限制限制?

    Android ART 运行时是否具有与 Dalvik 相同的方法限制限制 目前 主 dex 文件中的方法数量限制为 64k 问题不在于 Dalvik 运行时 也不在于 DEX 文件格式 而在于当前的一组达尔维克指令 具体来说就是各种方法调
  • Java - 自定义哈希图/表的一些要点

    在之前的一些文章中 我问了一些有关 java 中自定义哈希映射 表编码的问题 现在 由于我无法解决它 并且可能是我忘记正确提及我真正想要的东西 所以我总结了所有这些 以使其清晰而准确 我要做的事 我正在尝试为我们的服务器编写代码 在该服务器
  • 使用 Express 将多个数据库查询结果发送到单个视图

    我有一个仪表板视图 dashboard jade 它将显示两个具有不同信息的面板 所有这些信息都应该从数据库中检索 然后发送到视图 假设我有一个路由文件 document js 其中定义了两个操作 exports getAllDocumen
  • 将字符串转换为模板字符串

    是否可以创建一个模板字符串作为普通字符串 let a b b 然后将其转换为模板字符串 let b 10 console log a template b 10 without eval new Function以及其他动态代码生成方式 在
  • 从Python生成电影而不将单个帧保存到文件中

    我想根据在 matplotlib 中的 python 脚本中生成的帧创建 h264 或 divx 影片 这部电影大约有 100k 帧 在网络上的示例中 例如 1 我只见过将每一帧保存为png 然后在这些文件上运行mencoder或ffmpe
  • Numpy 协方差矩阵 numpy.cov

    我正在使用 numpy 并想要计算 ndarray 的协方差矩阵 我正在尝试使用 numpy cov 但没有得到正确的结果 更多详细信息如下 我的 ndarray 是 768x8 其中 8 是我的数据集中的数字特征 当我使用 MATLAB
  • JOBB DirectoryFullException:de.waldheinz.fs.fat.DirectoryFullException:目录已满

    我正在尝试在包含 192 个 jpg 文件 总计约 70 mb 的目录上使用 JOBB 工具 当我运行命令时jobb d C sdk tools dir data k 123456 o com nick app obb pn com nic
  • DOCX4J 插入换行符

    我在 DOCX 中有一个变量 我想用一个值替换它 首先 该变量不是放置在行的开头 而是放置在一些选项卡之后 我的值是邮政地址 我希望街道和邮政编码 城市 在不同的行中具有相同的缩进 街道替换了该行中的变量 邮政编码位于新行中 如下所示 4
  • 显示 iPhone 键盘时调整 UIView 大小,如何操作? [复制]

    这个问题在这里已经有答案了 我将向您展示一个众所周知的 Whatsapp 的例子 当您触摸文本内部时 键盘会弹出 因此我必须向上移动或移动所有栏并将视图大小调整为一半 这样我仍然可以看到我正在输入的文本和发送按钮 阶段1 http www
  • 为什么使用共享库时 Linux 上的应用程序启动速度会变慢?

    在我正在开发的嵌入式设备上 启动时间是一个重要问题 整个应用程序由多个使用一组库的可执行文件组成 由于闪存空间有限 我们希望使用共享库 当编译并与共享库链接时 应用程序照常工作 并且闪存容量按预期减少 与链接到静态库的版本的区别在于应用程序