繁体   English   中英

如何转义附加到 LD_PRELOAD 的库路径中的空格?

[英]How to escape spaces in library path appended to LD_PRELOAD?

我在 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

我已经是 escaping 'MyApp Test' 中的空间了。 通过这样的路径的正确方法是什么?

编辑:按照建议在没有转义空间的情况下导出,呈现相同的结果:

export LD_PRELOAD='/home/myuser/MyApp Test/lib/mylib.so'

以及(没有引号,只是转义空间):

export LD_PRELOAD=/home/myuser/MyApp\ Test/lib/mylib.so

动态加载器可能只是对空间进行简单的分割,在这种情况下,不可能让它将空间视为路径的一部分。

您可以通过创建指向您要预加载的不包含任何空格的库的符号链接来解决它。

编辑:

通过http://ubuntuforums.org/showthread.php?t=1142062 确认

与 PATH 或 LD_LIBRARY_PATH 等其他变量一样,此变量可能包含以冒号分隔的库名称列表。 但是......为了与遗留系统兼容,可以用空格分隔 LD_PRELOAD 元素。 而旧系统不理解 escaping,所以事实证明,如果它们包含空格,则不可能将完整的库路径放入 LD_PRELOAD。

您实际上可以通过将带空格的路径添加到 LD_LIBRARY_PATH 然后使用不带路径名的 LD_PRELOAD 来解决此问题。 例如:

export LD_LIBRARY_PATH="/home/myuser/MyApp\ Test/lib/":${LD_LIBRARY_PATH}
export LD_PRELOAD=mylib.so

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM