MetallicPriest
MetallicPriest

Reputation: 30825

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

When I try to use LD_PRELOAD as following,

LD_PRELOAD=getpid.so ./testpid

I get the following error...

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

I compile getpid.so by using

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

and it contains the following code...

// 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 code which uses getpid as shown below and which is compiled by doing

gcc testpid.c -o testpid

What can be the problem here? Why is LD_PRELOAD not working?

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

Upvotes: 15

Views: 28983

Answers (2)

Santosh Garole
Santosh Garole

Reputation: 1956

I was also facing error as below

ERROR: ld.so: object '/usr/lib64/libjemalloc.so.1' from LD_PRELOAD cannot be preloaded

Below were my steps resolved the error for me.

Go to the path /usr/lib64 and look for the libjemalloc using below commands*

  #cd /usr/lib64
  #ls | grep libjemalloc

if you don't find you don't have that package installed in your system

  $sudo yum whatprovides libjemalloc*
  $sudo yum install jemalloc-3.6.0-1.amzn2.x86_64

Upvotes: 0

codaddict
codaddict

Reputation: 455360

Looks like the loader is unable to find getpid.so as you've not mentioned the path to the library.

Try:

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

Upvotes: 23

Related Questions