2011-08-12 73 views
4

我試圖運行我的程序,它需要使用valgrind的庫中的庫位於 LD_PRELOAD環境變量中。當我這樣做,我得到了 以下錯誤:Valgrind和LD_PRELOAD - 無法預裝對象

ERROR: ld.so: object '/path/to/lib/libLIBRARY.so' from LD_PRELOAD cannot 
be preloaded: ignored. 

但是,如果我要運行程序WITHOUT Valgrind的,它高興地使用 LD_PRELOAD版庫。

爲什麼會出現這種情況?有沒有辦法解決它?

(P.S.該系統是64位Linux的科學5,相信)

+0

當遵循這個簡單的教程http://www.jayconrod.com/cgi/view_post.py?23時,我遇到了同樣的問題。我也是64位。一切(例如jmaloc和hello app我自己編譯,所以它是64位 - >用「文件」檢查) –

+0

任何解決方案? –

+0

查看環境變量['LD_DEBUG'](http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html)。具體地說,嘗試'export LD_DEBUG = all'。 –

回答

1

如果Valgrind是64位,並且兩個共享庫和應用程序是32位就會發生這種情況。 valgrind本身無法加載庫,但它應該爲應用程序本身加載。

編輯:哦,你真的不應該使用LD_PRELOAD作爲你自己的程序所需的庫,只能用於調試或重寫庫。相反,在可執行文件中嵌入一個rpath/runpath。

+0

在您使用共享對象後,valgrind會丟失很多符號,所以這是唯一的解決方法。但不幸的是,它不能與64位valgrind一起工作,因爲我們看到 – newhouse

+0

@newhouse咦?一般而言,'dlclose'是個不錯的主意,但我不明白這裏的相關內容。 – o11c