使用指定库运行程序

使用指定库运行程序

是否可以指定程序应使用的库的路径,而不是搜索系统变量?

答案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

相关内容