environment-variables - 使用 setenv 然后进行 dlopen 调用的问题

标签 environment-variables dlopen dyld setenv

我正在使用 setenv 来设置 DYLD_LIBRARY_PATH,所以当我执行 dlopen() 时,它将有正确的路径来找到我的 .dylib,但是当我执行 dlopen() 时,它似乎没有搜索我添加到 DYLD_LIBRARY_PATH 的路径。

从我可以收集到的我对 DYLD_LIBRARY_PATH 的更改不会生效,直到重新执行我的过程。这样对吗?

此外,如果这是正确的,有没有办法设置 DYLD_LIBRARY_PATH 并使我的更改工作而无需重置我的进程。

哦,是的,我在 MAC OSX 上编写了这段代码。

提前致谢。

最佳答案

我不了解 Mac OS,但在 Linux 上,加载程序读取 getenv("LD_LIBRARY_PATH") 的值。一次,并在可执行文件的第一条指令运行之前很久将其保存。 LD_LIBRARY_PATH的后续修改由该计划只影响它的所有 child execve() s,但不是过程本身。我想它在 Mac OS 上是相似的。

解决此问题的通常方法是重新 execve过程(Java 执行此操作),或使用设置环境的 shell 包装器,然后执行真正的二进制文件(Firefox 执行此操作)。

可能有一种 Mac OS 特定的方式来更新库搜索路径,但 Google 似乎没有找到任何匹配项。我很确定 Linux 上没有任何这样的机制。

关于environment-variables - 使用 setenv 然后进行 dlopen 调用的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713692/

相关文章:

node.js - 尝试在 Node 项目上启动我的服务器,但收到此错误

xcode - 如何确定 OS X dylib 是否与 -flat_namespace 链接

zlib - brew doctor : dyld: Library not loaded & Error: No available formula for zlib

python - 通过用户输入的文件路径导入文件

java - Tomcat - CATALINA_BASE 和 CATALINA_HOME 变量

java - Java中读取环境变量的值

c++ - 使用 dlopen,我如何应对已加载的库文件的更改?

environment-variables - 如何恢复已删除的环境变量?

c - 动态链接 LibCURL 时出错

c - 为什么使用 dlopen 加载时 libao 没有声音?