为什么使用共享库时 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 上的应用程序启动速度会变慢? 的相关文章

  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • 使用 Gas 生成与位置无关的代码 (-fPIC)

    我尝试在 x86 64 上创建共享库但失败 问题归结为以下代码 请不要介意 它没有多大意义 section data newline ascii n section text globl write newline type write n
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • MySQL 中的创建/写入权限

    我的设备遇到一些权限问题SELECT INTO OUTFILE陈述 当我登录数据库并执行简单的导出命令时 例如 mysql gt select from XYZ into outfile home mropa Photos Desktop
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • 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 上的应用程序启动速度会变慢?

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