Linux Prog 有 24 个 Libs Fails LDD,strace 在 prog 库读取期间显示 692“1 ENOENT”

Linux Prog 有 24 个 Libs Fails LDD,strace 在 prog 库读取期间显示 692“1 ENOENT”

我正在请求对 prog 初始化的预期和期望结果的意见,特别是为我没有源代码的程序加载共享库。所有代码均通过 RPM 交付。

  • 可疑 prog 在两个 TCP 连接上表现出恒定的 Revc-Q 缓冲。 TCP conns 的另一端看起来不错。可疑的 prog 几乎不断地缓冲 1000-10000 字节,很少变为零。可疑 prog 的主机显示 tcpActiveOpens.0 为 50,000,tcpAttemptFails.0 为 47,000,两者都在连续递增。许多其他可能的 TCP 问题。

  • 当 ldd 在可疑的 prog 上运行时,返回总共 42 个库,其中 24 个“未找到”,另外 18 个使用 DIR 和 hexaddr 进行解析。在可疑的 prog 周围放置一个 strace 包装器,并在每个库上记录许多“-1 ENOENT”,而不仅仅是那些用 ldd 标记为“未找到”的库。最终找到所有库并将其加载到可疑的 progs 内存中。有些人在成功之前有多达 42 个 ENOENT。

  • 联系开发人员并告知了调查结果,他们保证当我运行 ldd 时,我需要获取他们的环境配置文件,该文件应该在程序启动时运行并设置所有库路径。对 ENOENT 没有任何评论。

问题:当您完成代码并编译后,您是否使用 ldd 等工具进行验证? ldd 是否应该始终返回 0,或者一些或很多“未找到”并不总是一个问题。那么 ENOENT 呢?在我看来,如果代码编译并正确运行,应该是零错误。

答案1

ldd应该总是返回OK,否则程序无法运行。另一方面,有一些方法可以控制动态链接器搜索共享库的位置。根据您从程序供应商那里得到的答复,我认为他们已经提供了某种启动脚本来设置程序环境,以便满足搜索路径。如果您没有像预期的那样运行该程序,ldd很可能会报告错误。

ENOENT当库搜索路径包含多个目录时,这些错误是完全正常的。动态链接器尝试通过打开请求的文件来查找它正在查找的内容,如果没有找到(“没有这样的文件或目录”),它将继续到搜索路径中的下一个目录。这不仅适用于共享库,也适用于其他类型的文件。例如,如果配置文件是可选的,则程序将忽略错误消息并继续执行。

诗。我发现你提出的问题的报纸交友广告风格很有趣。

相关内容