【问题标题】:LD_LIBRARY_PATH not working while LD_PRELOAD works fineLD_LIBRARY_PATH 不工作,而 LD_PRELOAD 工作正常
【发布时间】:2012-12-11 12:12:25
【问题描述】:

我正在一台机器上编译一个程序并在另一台没有兼容的 libstdc++ 库的机器上运行它。如果我这样运行它,即使用 LD_PRELOAD,它运行良好。

LD_PRELOAD=./libstdc++.so.6 ./program args

但是,如果我尝试使用 LD_LIBRARY_PATH,如下所示,它不会加载库,并且我会收到我没有所需的 libstdc++ 版本的错误。

export LD_LIBRARY_PATH="./libstdc++.so.6"
./program args

我该如何解决这个问题?

【问题讨论】:

  • 如果 libstdc++.so.6 和我的程序在同一个目录下,你能告诉我如何使用 LD_LIBRARY_PATH 命令吗?

标签: c++ c linux gcc


【解决方案1】:

您需要在 LD_LIBRARY_PATH 变量中提供路径:

LD_LIBRARY_PATH=$PWD ./program args

【讨论】:

    【解决方案2】:

    LD_LIBRARY_PATHPATH 一样,获取目录列表,而不是文件。

    如果你想把当前目录(推荐)放在那里,你可以:

    export LD_LIBRARY_PATH=.
    

    但是最好把绝对路径放在那里,这样你就不会在更改目录时捡起随机垃圾。

    对于您的具体问题,保留LD_PRELOAD 实际上可能是最好的方法,以防您的可执行文件具有rpath 设置(这可能会覆盖环境)。如果您不想每次都重新键入它,请创建一个包装脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      相关资源
      最近更新 更多