当我尝试使用LD_PRELOAD时,
LD_PRELOAD=getpid.so ./testpid
我收到以下错误...
ERROR: ld.so: object 'getpid.so' from LD_PRELOAD cannot be preloaded: ignored.
我使用
编译getpid.sogcc -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;
}
答案 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