我坐在我有没有真正的控制环境(这不只是我,所以基本上,我不能改变环境或者它不会为别人工作),我唯一能影响如何二进制构建。

我的问题是,环境指定包含一个的libstdc ++与所使用的编译器,其是不兼容的LD_LIBRARY_PATH。我试着静态编译它,但是这似乎并不可能G ++(4.2.3版本,似乎一直工作在以后的版本,虽然它是不可用的,-static-的libstdc ++或类似的东西,这个方向进行)。

现在我在使用rpath中烤的绝对路径名到可执行文件到达(会的工作,所有的机器它应该上是相同的运行)。不幸的是,看起来好像LD_LIBRARY_PATH优先rpath的(重置LD_LIBRARY_PATH证实,它能够找到库,但如上所述,LD_LIBRARY_PATH会为大家设置了,我不能改变的)。

有没有什么办法可以让rpath中优先于LD_LIBRARY_PATH,还是有我的问题的任何其他可能的解决方案?请注意,我在运行时谈论的动态链接,我可以在编译和链接时,控制命令行。

感谢。

有帮助吗?

解决方案

针对libstdc++.a链接是绝对有可能,尽管棘手。指令这里

我有点怀疑你的要求的是LD_LIBRARY_PATH优先于“烤” DT_RPATH,但 - 至少在Linux和(我相信)的Solaris,LD_LIBRARY_PATH只是看了之后DT_RPATH查找失败

其他提示

也许你可以使用一个shell封装程序修改环境只是这个计划?

#!/bin/sh

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

此应该重载LD_LIBRARY_PATH执行之前,然后通过EXEC二进制文件更换包装。

请问这帮助?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top