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

标签 linux unix 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

我已经转义了“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/

相关文章:

linux - 内核升级后 : missing keyboard events

linux - MediaTemple DV 服务器上的 APC 安装错误

linux - 哪个 linux 风格正在运行

android - 从连接到 Linux 的 Android 手机进行语音通话

xmllint 在 shell 脚本中不工作

linux - 在 Linux x86 上调用 backtrace() 时出现段错误

Android 4.2 - 是否支持 LD_PRELOAD?

linux - 如何使用 unix shell 脚本将多个 csv 文件合并到一个 Excel 工作表中?

bash - 如何使用awk从两个文件中找出公共(public)列及其记录

linux - 覆盖linux中正在运行的进程的函数