为什么 ld.so 不能预加载 libdiehard.so?

为什么 ld.so 不能预加载 libdiehard.so?

我想使用死硬死硬的顽固的解决Linux 上的 Citrix IAClient 中的错误。我按照说明进行了编译,但是当我尝试使用结果时,得到了以下输出:

> export LD_PRELOAD=/path/to/DieHard/src/libdiehard.so
> /opt/Citrix/ICAClient/wfica -log $PWD/launch.ica
ERROR: ld.so: object '/home/adigulla/packages/DieHard/src/libdiehard.so' from LD_PRELOAD cannot be preloaded: ignored.

导致此错误的原因是什么?

注意:我使用此命令在 x86_64 系统上编译源代码:

g++ -m32 -finline-functions -malign-double -pipe -march=pentium4 -O3 -DNDEBUG  -I. -Iinclude -Iinclude/layers -Iinclude/util -Iinclude/math -Iinclude/static -Iinclude/rng -Iinclude/hoard -Iinclude/superblocks -IHeap-Layers -DDIEHARD_DIEHARDER=0 -D_REENTRANT=1 -DDIEHARD_MULTITHREADED=1 -shared -D'CUSTOM_PREFIX(x)=diehard##x' Heap-Layers/wrappers/gnuwrapper.cpp source/libdieharder.cpp -Bsymbolic -o libdiehard.so -ldl -lpthread

结果似乎是一个32位库:

> file /path/to/DieHard/src/libdiehard.so
libdiehard.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=0x053addc2defba6b46714eb5d70fdbede6a401ca8, not stripped

答案1

死硬死硬的顽固的作者在这里。

在 64 位 Linux 系统上,您应该使用以下 make 命令构建 DieHard:

make linux-gcc-x86-64

这将生成一个 64 位共享库,可供 64 位可执行文件使用。此外,你可以LD_PRELOAD通过设置该环境变量来调试依赖于里面编译:

$ gdb yourprogram
(gdb) set environment LD_PRELOAD /path/to/DieHard/src/libdiehard.so
(gdb) run

相关内容