【问题标题】:LD_LIBRARY_PATHLD_LIBRARY_PATH
【发布时间】:2009-05-06 16:40:09
【问题描述】:

我可以为单个应用程序设置 LD_LIBRARY_PATH 吗? 我正在调查系统调用失败,有什么方法可以使用 LD_LIBRARY_PATH 设置设置正确的路径?

【问题讨论】:

    标签: c


    【解决方案1】:

    最简单的方法是创建一个 shell 脚本。

    让 shell 脚本导出您的新 LD_LIBRARY_PATH 变量,然后启动您的应用程序

    例如(其中 foo 是您的应用)

    #!/bin/sh
    LD_LIBRARY_PATH=some_path:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH
    foo
    

    【讨论】:

      【解决方案2】:

      就这么简单:

      LD_LIBRARY_PATH=new_path:$LD_LIBRARY_PATH foo
      

      在 bash 中有效。我认为它适用于所有 bourne shell 衍生产品,但我不能保证。

      当然,使用这种方法,您必须每次都输入路径。要反复做,首选Glen's approach

      【讨论】:

      • 该技术适用于 Bourne shell、Korn shell 和 POSIX shell。
      【解决方案3】:

      需要注意的一点:您不能在程序中设置LD_LIBRARY_PATH 并使其对当前程序产生任何影响。这是因为动态加载器(ld.so.1 或类似名称)已经加载,并且在运行任何代码之前已经读取并处理了环境变量。您可以在当前进程的环境中设置它,然后该值将影响任何子进程,并且您可以使用exec() 系列函数之一来运行具有该环境集的程序。在极端情况下,您可以重新执行当前程序 - 但那是 extreme

      【讨论】:

      • 不知道在程序中设置了LD_LIBRARY_PATH后dlopen是否有效
      • 你可以找到源代码,看看dlopen()是否每次调用都会读取环境变量。我的印象是它没有,但我已经有很长时间没有尝试过了,而且在过去的十年里情况可能已经发生了变化。
      猜你喜欢
      • 1970-01-01
      • 2011-05-14
      • 2013-08-16
      • 2023-03-29
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多