2011-12-12 9 views
11

Cuando intento utilizar LD_PRELOAD de la siguiente manera,ERROR: ld.so: objeto 'getpid.so' de LD_PRELOAD no puede ser precargado: ignorada

LD_PRELOAD=getpid.so ./testpid 

me sale el siguiente error ...

ERROR: ld.so: object 'getpid.so' from LD_PRELOAD cannot be preloaded: ignored. 

compilo getpid.so utilizando

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

y contiene el siguiente código ...

// 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 código que utiliza getpid como se muestra a continuación y que se compila haciendo

gcc testpid -o testpid.c 

Cuál puede ser el problema aquí? ¿Por qué LD_PRELOAD no funciona?

// 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; 
} 

Respuesta

18

Parece que el cargador no puede encontrar getpid.so ya que no se ha mencionado la ruta a la biblioteca.

Probar:

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

Muy cierto! En lugar de LD_PRELOAD = getpid.so ./testpid, debería ser LD_PRELOAD =./Getpid.so ./testpid. Ahora funciona. – MetallicPriest

+2

en mi caso, también tuve que establecer 'LD_LIBRARY_PATH' y obtener la versión de 64 bits de la biblioteca. –

Cuestiones relacionadas