ОШИБКА: ld.so: объект 'getpid.so' из LD_PRELOAD не может быть предварительно загружен: проигнорирован

Когда я пытаюсь использовать LD_PRELOAD следующим образом,

LD_PRELOAD=getpid.so ./testpid

Я получаю следующую ошибку...

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

Я компилирую getpid.so с помощью

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

и содержит следующий код...

// 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 содержит код, который использует getpid, как показано ниже, и который скомпилирован с помощью

gcc testpid -o testpid.c

В чем может быть проблема? Почему LD_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;
}

Ответ 1

Похоже, что загрузчик не может найти getpid.so, поскольку вы не указали путь к библиотеке.

Try:

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