【发布时间】:2009-05-06 16:40:09
【问题描述】:
我可以为单个应用程序设置 LD_LIBRARY_PATH 吗? 我正在调查系统调用失败,有什么方法可以使用 LD_LIBRARY_PATH 设置设置正确的路径?
【问题讨论】:
标签: c
我可以为单个应用程序设置 LD_LIBRARY_PATH 吗? 我正在调查系统调用失败,有什么方法可以使用 LD_LIBRARY_PATH 设置设置正确的路径?
【问题讨论】:
标签: c
最简单的方法是创建一个 shell 脚本。
让 shell 脚本导出您的新 LD_LIBRARY_PATH 变量,然后启动您的应用程序
例如(其中 foo 是您的应用)
#!/bin/sh
LD_LIBRARY_PATH=some_path:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
foo
【讨论】:
就这么简单:
LD_LIBRARY_PATH=new_path:$LD_LIBRARY_PATH foo
在 bash 中有效。我认为它适用于所有 bourne shell 衍生产品,但我不能保证。
当然,使用这种方法,您必须每次都输入路径。要反复做,首选Glen's approach。
【讨论】:
需要注意的一点:您不能在程序中设置LD_LIBRARY_PATH 并使其对当前程序产生任何影响。这是因为动态加载器(ld.so.1 或类似名称)已经加载,并且在运行任何代码之前已经读取并处理了环境变量。您可以在当前进程的环境中设置它,然后该值将影响任何子进程,并且您可以使用exec() 系列函数之一来运行具有该环境集的程序。在极端情况下,您可以重新执行当前程序 - 但那是 extreme!
【讨论】:
dlopen是否有效
dlopen()是否每次调用都会读取环境变量。我的印象是它没有,但我已经有很长时间没有尝试过了,而且在过去的十年里情况可能已经发生了变化。