我在 Linux 上遇到 LD_PRELOAD 问题。在启动我的应用程序之前,我正在尝试加载一个存在于名称中包含空格的目录中的库:
> export LD_PRELOAD='/home/myuser/MyApp\ Test/lib/mylib.so'
但是,路径没有正确选择。它在空间存在的地方被分割,所以它尝试预加载这些:
ERROR: ...: object '/home/myuser/MyApp' from LD_PRELOAD cannot be preloaded: ignored
ERROR: ...: object 'Test/lib/mylib.so' from LD_PRELOAD cannot be preloaded: ignored
我已经转义了“MyApp Test”中的空格。通过这样的路径的正确方法是什么?
编辑:按照建议在没有转义空间的情况下导出,呈现相同的结果:
export LD_PRELOAD='/home/myuser/MyApp Test/lib/mylib.so'
以及(没有引号,只是转义空格):
export LD_PRELOAD=/home/myuser/MyApp\ Test/lib/mylib.so
最佳答案
动态加载器可能只是对空间进行简单的分割,在这种情况下,不可能让它将空间视为路径的一部分。
您可以通过创建指向您要预加载的库的不包含任何空格的符号链接(symbolic link)来解决它。
编辑:
由 http://ubuntuforums.org/showthread.php?t=1142062 确认
As other variables like PATH or LD_LIBRARY_PATH, this variable may contain list of library names separated by colons. But... for compatibility with legacy systems it is possible to separate LD_PRELOAD elements by spaces. And older systems did not understand escaping so it turns out it is impossible to put full library paths into LD_PRELOAD if they contain spaces.
关于linux - 如何转义附加到 LD_PRELOAD 的库路径中的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10072609/