忽略LD_LIBRARY_PATH并通过-rpath链接时给出库坚持
-
18-09-2019 - |
题
我坐在我有没有真正的控制环境(这不只是我,所以基本上,我不能改变环境或者它不会为别人工作),我唯一能影响如何二进制构建。
我的问题是,环境指定包含一个的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二进制文件更换包装。
请问这帮助?
不隶属于 StackOverflow