是否可以指定程序应使用的库的路径,而不是搜索系统变量?
答案1
您在这里有几个选择。最常见的是
LD_LIBRARY_PATH=/custom/path:$LD_LIBRARY_PATH ./yourprogram
其次,稍微强大一点的是
LD_PRELOAD=/custom/path/lib.so ./yourprogram
第一个只是将您的路径放在搜索列表中的第一位。第二个在加载任何其他库之前加载您的库。两者都没有完全取消默认搜索路径。除非您要替换所有动态加载的库,否则可能很好。
如果您正在编译自己的程序,您还有更多选择。您可以静态链接(完全链接或仅.a
链接库的一部分),也可以设置运行时搜索路径。执行此操作的选项可能会有所不同,具体取决于您的编译器。
添加评论:
如果您担心附加空白路径,LD_LIBRARY_PATH
可以使用
LD_LIBRARY_PATH=/custom_path${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ./myprogram
对于一次性命令来说有点复杂,但总体来说更安全。感谢斯蒂芬·基特指出了这个问题。
答案2
如果您预加载一个库,动态链接器将在查找其他库之前使用它来绑定符号:
LD_PRELOAD=/path/to/library.so program
您可以通过以下方式提前检查ldd
:
LD_PRELOAD=/path/to/library.so ldd program
如果成功,您将/path/to/library.so
在输出中看到而不是 . 请求的系统库program
。