2011-08-12 2 views
4

valgrind를 사용하여 라이브러리가 LD_PRELOAD 환경 변수에 있어야하는 프로그램을 실행하려고합니다. 내가 Valgrind의없이 프로그램 을 실행입니다 경우가 행복하게 LD_PRELOAD 에드 라이브러리를 사용, 그러나Valgrind 및 LD_PRELOAD - 개체를 미리로드 할 수 없습니다.

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

: 나는이 작업을 수행 할 때 나는 다음과 같은 오류가 발생합니다.

왜 이런 경우입니까? 그리고 그것을 고칠 수있는 방법이 있습니까?

(추신 :이 시스템은, 내가 믿는 64 비트 과학 리눅스 5)

+0

간단한 튜토리얼 http://www.jayconrod.com/cgi/view_post.py?23에 따라 동일한 문제가 발생했습니다. 나는 또한 64 비트입니다. 모든 것 (예 jmaloc 및 hello 응용 프로그램을 컴파일하므로 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는 공유 객체를 dlclose'd 한 후에 많은 심볼을 누락하므로이 유일한 해결 방법입니다. 하지만 unfortunatelly 우리가 볼 때 64 비트 valgrind와 함께 작동하지 않습니다 – newhouse

+0

@newhouse 응? 그리고'dlclose'는 일반적으로 나쁜 생각입니다. 그러나 나는 그것이 어떻게 관련이 있는지를 보지 못했습니다. – o11c

관련 문제