我正在使用 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/