我坐在一个我没有真正控制的环境中(它不只是我,所以基本上,我不能改变环境或赢得' t为其他人工作),我唯一可以影响的是二进制文件是如何构建的。忽略LD_LIBRARY_PATH并坚持链接时通过-rpath给出的库
我的问题是,环境指定了一个LD_LIBRARY_PATH,其中包含一个与正在使用的编译器不兼容的libstdC++。我试着静态编译它,但对g ++来说似乎不可能(版本4.2.3,似乎在后来的版本中已经完成了这方面的工作,尽管它不可用,-static-libstdC++或类似的东西)。
现在我已经到达使用rpath将绝对路径名称烘焙到可执行文件中(可以工作,它应该运行的所有机器都是相同的)。不幸的是,似乎LD_LIBRARY_PATH优先于rpath(重置LD_LIBRARY_PATH确认它能够找到该库,但如上所述,将为每个人设置LD_LIBRARY_PATH,并且我无法更改它)。
有没有什么办法可以使rpath优先于LD_LIBRARY_PATH,还是有任何其他可能的解决方案来解决我的问题吗?请注意,我在运行时讨论动态链接,我可以在编译和链接时控制命令行。
谢谢。
我看过这篇文章,'伪造'没有'.so'文件的目录可能有效。我只能改变编译器和命令行(尽管我想我可以将编译器改为脚本),但我也许可以创建自己的lib目录。我会给它一个镜头。至于第二部分,这是一个Solaris环境,我做的测试是:'ldd binary'从LD_LIBRARY_PATH生成库,'LD_LIBRARY_PATH = ldd binary'生成一个(不重要的)烘焙文件。我不知道这些东西是如何实现的,我只能告诉你我看到了什么。 – falstro 2010-03-10 08:58:33
声明在Solaris下'LD_LIBRARY_PATH'优先于'DT_RPATH'是* [绝对正确](http://docs.oracle.com/cd/E19082-01/819-0690/chapter6-63352/index.html) *只要进程不符合[安全进程]的定义(http://docs.oracle.com/cd/E19683-01/816-1386/6m7qcobkt/index.html)。 – vladr 2013-05-02 18:46:53