2012-04-09 10 views
2

LinuxでLD_PRELOADに問題があります。私は、右の自分のアプリケーションを起動する前に、名前にスペースを含むディレクトリ内の既存のライブラリをロードしようとしている: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」のスペースをエスケープしています。そのようなパスを渡す正しい方法は何ですか?

編集:提案されているようにエスケープスペースなしに輸出し、同じ結果をレンダリング:

輸出LD_PRELOAD = '/ホーム/ myuserの/ MyAppのテスト/ libに/ mylib.so'

として、

輸出LD_PRELOAD = /ホーム/ myuserの/ MyAppに\テスト/ libに/ mylib.so

:ウェル(引用符なし、ただエスケープスペース)など
+2

試してください: '輸出LD_PRELOAD = '/ホーム/ myuserの/ MyAppのテスト/ libに/ mylib.so'' – cnicutar

+0

私はバックスラッシュなしで試してみましたが、それは同じ問題を抱えています。ライブラリパスは2つに分割されています – Dan

答えて

8

ダイナミックローダーは恐らくスペース上で素朴な分割をしているだけです。この場合、スペースをパスの一部として扱うことはできません。

事前に読み込みたいライブラリへのシンボリックリンクを作成することで回避できます。スペースは含まれていません。

編集:PATHまたはLD_LIBRARY_PATHのような他の変数としてhttp://ubuntuforums.org/showthread.php?t=1142062

によって確認

、この変数が コロンで区切られたライブラリー名のリストが含まれていてもよいです。しかし... のレガシーシステムとの互換性のために、 LD_PRELOAD要素をスペースで区切ることは可能です。そして、古いシステムでは がエスケープしていると分かりませんでしたので、完全なライブラリパス にスペースが含まれているとLD_PRELOADを入れることは不可能です。

+0

可能であればあなたに+2を与えるでしょう、ありがとう! – Dan

2

この問題を回避するには、パスをスペースでLD_LIBRARY_PATHに追加し、パス名なしでLD_PRELOADを使用します。たとえば、次のようにバックスラッシュを付けずに

export LD_LIBRARY_PATH="/home/myuser/MyApp\ Test/lib/":${LD_LIBRARY_PATH} 
export LD_PRELOAD=mylib.so 
関連する問題