Mic*_*uth 5 environment-variables dyld dlopen 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") Once的值并将其保存起来。LD_LIBRARY_PATH程序的后续修改仅影响其子execve()进程,但不会影响进程本身。我想 Mac 操作系统上也是类似的。
解决这个问题的通常方法是重新execve处理(Java 就是这样做的),或者使用 shell 包装器来设置环境,然后执行真正的二进制文件(Firefox 就是这样做的)。
可能有 Mac OS 特定的方法来更新库搜索路径,尽管 Google 似乎没有找到任何匹配项。我很确定Linux 上没有任何这样的机制。
我的问题的答案是否定的,如果不重新执行 LD_LIBRARY_PATH 上的进程以使环境变量对 dlopen 生效,则无法使用 setenv。
我发现您应该使用 @exectuable_path、@loader_path 或 @rpath 作为我的 .dylb 上的安装名称路径,这样您就可以从 dlopen 对 .dylibs 进行相对路径搜索。
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |