How to escape spaces in library path appended to LD_PRELOAD?
ld-preload, linux, unix
Solution
The dynamic loader is probably just doing a naive split on spaces, in which case it's impossible to get it to treat the space as part of your path.
You can work around it by creating a symlink to the library you want to preload that doesn't contain any spaces.
Edit:
confirmed by 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.
Problem
I'm having a problem with LD_PRELOAD on Linux. I'm trying to load a library existing in a directory with spaces in its name, right before launching my application: ``` > export LD_PRELOAD='/home/myuser/MyApp\ Test/lib/mylib.so' ``` However, the path is not being taken properly. It gets split where the space exists, so it tries to preload these: ``` 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 ``` I'm already escaping the space in 'MyApp Test'. What is the correct way to pass such path? Edit: exporting without the escaped space as suggested, renders the same results: export LD_PRELOAD='/home/myuser/MyApp Test/lib/mylib.so' As well as (no quotes, just escaped space): export LD_PRELOAD=/home/myuser/MyApp\ Test/lib/mylib.so