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
gdb /opt/Citrix/ICAClient/wfica -log $PWD/launch.ica
gdb ld.so
pero ¿cómo hago el enlace dinámico manualmente?Respuestas:
DieHard autor aquí.
En un sistema Linux de 64 bits, debe compilar DieHard con el siguiente comando make:
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_PRELOAD
estableciendo esa variable de entorno dentro de gdb:fuente