¿Por qué no puede ld.so precargar libdiehard.so?

1

Quiero usar DieHard para solucionar errores en Citrix IAClient en Linux . Compilé según las instrucciones, pero cuando trato de usar el resultado, obtengo este resultado:

> 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.

Que esta causando este error?

Nota: Utilicé este comando para compilar la fuente en un sistema 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

El resultado parece ser una biblioteca de 32 bits:

> 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
Aaron Digulla
fuente
Intente usar gdb para depurar y publicar el resultado. gdb /opt/Citrix/ICAClient/wfica -log $PWD/launch.ica
user555
Cuando hago eso, ld.so también intenta aplicar la biblioteca a GDB. Esto no hace ningún daño, pero no puedo establecer un punto de interrupción ya que ld.so no carga el objeto compartido. Supongo que necesito usar, gdb ld.sopero ¿cómo hago el enlace dinámico manualmente?
Aaron Digulla

Respuestas:

0

DieHard autor aquí.

En un sistema Linux de 64 bits, debe compilar DieHard con el siguiente comando make:

make linux-gcc-x86-64

Esto producirá una biblioteca compartida de 64 bits, que será utilizable por ejecutables de 64 bits. Además, puede depurar el código en el que se basa LD_PRELOADestableciendo esa variable de entorno dentro de gdb:

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