gpt4 book ai didi

c - 哪些代码可能对环境(变量)敏感?

转载 作者:行者123 更新时间:2023-11-30 19:14:16 26 4
gpt4 key购买 nike

我这里有一些(遗留)代码,似乎在LD_LIBRARY_PATH上调用setenv(其值在编译时未知,实际上它将从命令中获取)行),现在我必须将其移植到 Windows。我怀疑 setenv 只是出于历史原因而完成的,它不再具有实际效果,我想确认这一点。

因此,我的方法是检查环境的所有用途,看看是否有任何用途会受到 LD_LIBRARY_PATH (或任何其他)的影响。因此,我认为除非调用 environ 变量或某些函数,否则代码将对环境不敏感(直接、间接或在后续代码中)。

我确定的(候选)职能是:

  • getenv
  • 执行*
  • 打开
  • 系统
  • dlopen 和 friend
  • 仅依赖于 TZ 变量的时间函数
  • 与区域设置相关的函数,仅检索当前区域设置

包含 getenv 的原因很明显,因为后续代码可能取决于环境变量的值。包含 exec*popensystem 是因为首先(子)程序的链接可能会受到环境的影响,而且 (子)程序本身可能依赖于环境,dlopen我认为会在LD_LIBRARY_PATH中搜索库(这里链接库本身也可能在初始化期间访问环境或稍后)。其余的原因是我知道标准库中的很多地方都使用了 TZ 和语言环境。

我是否错过了某些功能或代码可能依赖于环境的其他情况?当然,我意识到这受到加载的库的影响,但据我所知,只有加载的“标准”库加上 libsqlite3 (加上 libpthreadlibdllibm)。我猜想 SQLite3 可能对某些环境变量敏感,但是 LD_LIBRARY_PATH 是其中之一吗?

郑重声明,这次程序似乎不包含 exec*dlopen,但我包含它们,因为在另一种情况下它们可能会包含在内。

最佳答案

您应该检查每个函数的文档。那是dlopen明确指出它使用LD_LIBRARY_PATH作为搜索列表来查找共享库。

当您在任何情况下都可以将路径指定为 dlopen 的参数时,强制加载特定库似乎是一种相当笨拙的方法。

除此之外,它是 GNU 链接器 ld 用于定位静态库的值。因此,不太可能但有可能的是,它被您的应用程序使用,因为它启动了链接器或其他使用 dlopen 的进程,它可以通过 exec 执行,例如,popensystem。鉴于您的代码具有所有这些功能,很明显正在启动一些外部进程。

关于c - 哪些代码可能对环境(变量)敏感?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34430558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com