【问题标题】:Overriding libstdc++ search path at runtime on Linux在 Linux 上运行时覆盖 libstdc++ 搜索路径
【发布时间】:2013-06-18 19:17:05
【问题描述】:

我正在尝试为我的游戏 Open Hexagon 创建一个独立于发行版的 .tar.gz 存档,该游戏使用最新版本的 GCC (4.8.1) 编译并使用最新版本的libstdc++

因为它已经使用了很多共享库,所以我决定将游戏连同它需要的.so 文件一起部署,包括libstdc++ 的正确版本。

我使用LD_LIBRARY_PATH 更改了默认库搜索路径。不幸的是,Linux(不同于 Windows)总是优先考虑/usr/lib/,即使设置了LD_LIBRARY_PATH

有没有办法在运行时覆盖libstdc++ 的搜索路径?到目前为止,我看到的唯一解决方案是在编译时弄乱rpathrunpath,这是我想避免的。另一种解决方案是静态链接,但我听说这在 Linux 中是一种不好的做法,而且我还为我的游戏使用了一个自动更新程序,它只自动更新最新的 .so 库。

【问题讨论】:

  • 能否请您指向手册页上说的 linux /usr/lib/ 优先于 LD_LIBRARY_PATH

标签: c++ linux shared-libraries ld dynamic-linking


【解决方案1】:

使用“export LD_LIBRARY_PATH=[my new path]:$LD_LIBRARY_PATH”对我有用。它不会将 /usr/lib 置于更高的优先级。

【讨论】:

  • 我的测试表明 libstdc++/usr/lib/ 中找到,即使在 LD_LIBRARY_PATH 中设置了自定义路径。也许我做错了什么?当默认文件夹中存在库的一个版本时,您是否真的成功地找到了另一个版本的 libstdc++LD_LIBRARY_PATH
  • @Vittorio Romeo 你能给你发LD_LIBRARY_PATH的内容吗?
【解决方案2】:

通过在编译时删除 RPATH 部分解决。不过,在较旧的发行版上,glibc 的不同版本仍然存在问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2021-12-12
    • 2012-07-08
    • 2015-08-11
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多