错误:ld.so:LD_PRELOAD中的对象'getpid.so'无法预加载:忽略

时间:2011-12-12 11:57:17

标签: c linux dynamic x86-64

当我尝试使用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的constains代码,如下所示,并通过执行编译

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

2 个答案:

答案 0 :(得分:19)

看起来加载器无法找到getpid.so,因为您没有提到库的路径。

尝试:

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

答案 1 :(得分:0)

我也遇到了如下错误

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

以下是我的步骤为我解决了错误。

转到路径 /usr/lib64 并使用以下命令查找 libjemalloc*

  #cd /usr/lib64
  #ls | grep libjemalloc

如果你没有发现你的系统中没有安装那个包

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