2011-12-12 10 views
11

मैं, निम्नलिखित के रूप में उपयोग करने के लिए LD_PRELOADत्रुटि: ld.so: वस्तु LD_PRELOAD से 'getpid.so' पहले से लोड नहीं किया जा सकता: नजरअंदाज कर दिया

LD_PRELOAD=getpid.so ./testpid 

मैं निम्न त्रुटि ...

ERROR: ld.so: object 'getpid.so' from LD_PRELOAD cannot be preloaded: ignored. 
का प्रयास करते हैं

मैं

gcc -Wall -fPIC -shared -o getpid.so getpid.c 

का उपयोग करके getpid.so संकलन और यह निम्नलिखित कोड शामिल ...

// getpid.c 
#include <sys/syscall.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <stdio.h> 

pid_t getpid(void) 
{ 
    printf("Hello, world!\n"); 
    return syscall(SYS_getpid); 
} 

tespid.c constains कोड है जो नीचे दिखाया गया है और के रूप में getpid का उपयोग करता है जो

gcc testpid -o testpid.c 

करके संकलित किया गया है यहाँ समस्या हो सकती है क्या? एलडी_PRELOAD क्यों काम नहीं कर रहा है?

// testpid.c 
#include <sys/syscall.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <stdio.h> 

int main() 
{ 
    printf("pid = %d!\n", getpid()); 

    return 0; 
} 

उत्तर

18

लग रहा लोडर की तरह getpid.so खोजने के लिए के रूप में आप पुस्तकालय के लिए पथ का उल्लेख नहीं किया गया है में असमर्थ है।

प्रयास करें:

LD_PRELOAD=/full/path/to/getpid.so ./testpid 
+3

बहुत सच! LD_PRELOAD = getpid.so ./testpid के बजाय, यह LD_PRELOAD =।/Getpid.so ./testpid होना चाहिए। अब यह काम कर रहा है। – MetallicPriest

+2

मेरे मामले में मुझे 'LD_LIBRARY_PATH' भी सेट करना था और लाइब्रेरी का 64-बिट संस्करण प्राप्त करना था। –

संबंधित मुद्दे