代码之家  ›  专栏  ›  技术社区  ›  falstro

忽略ld_library_路径,并在链接时使用通过-rpath提供的库

  •  2
  • falstro  · 技术社区  · 15 年前

    我坐在一个我无法真正控制的环境中(不仅仅是我,所以基本上,我不能改变环境,或者它对任何人都不起作用),我唯一能影响的就是二进制文件是如何构建的。

    我的问题是,环境指定了一个包含libstdc++的ld_库\路径,该路径与所使用的编译器不兼容。我试着静态编译它,但是对于G++来说这似乎是不可能的(4.2.3版,在以后的版本中似乎是朝这个方向工作的,尽管这些版本不可用,-static libstdc++或类似的东西)。

    现在,我已经开始使用rpath将绝对路径名烘焙到可执行文件中(可以,它运行的所有机器都是相同的)。不幸的是,似乎ld_library_path优先于rpath(重置ld_library_path确认它能够找到库,但如上所述,ld_library_path将为每个人设置,我无法更改)。

    我有没有办法让rpath优先于ld_library_path,或者有没有其他可能的方法来解决我的问题?注意,我正在讨论运行时的动态链接,我能够在编译和链接时控制命令行。

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Employed Russian    15 年前

    联系反对 libstdc++.a 当然是可能的,尽管很棘手。说明 here .

    我对你的说法有点怀疑 LD_LIBRARY_PATH 优先于“烘焙” DT_RPATH 不过——至少在Linux和(我相信)Solaris上, LDL图书馆路径 只是在看完 日期 查找失败。

        2
  •  3
  •   fen    15 年前

    也许您可以使用一个外壳包装器来修改这个程序的环境?

    #!/bin/sh
    
    LD_LIBRARY_PATH="/path/to/your/lib:${LD_LIBRARY_PATH}"
    export LD_LIBRARY_PATH
    exec /path/to/binary $@
    

    这应该在执行之前重载ld_library_路径,然后通过exec将包装替换为二进制文件。

    这有帮助吗?