Por que o ld.so não pode pré-carregar o libdiehard.so?

1

Eu quero usar o DieHard para contornar bugs no Citrix IAClient no Linux . Eu compilei de acordo com as instruções, mas quando tento usar o resultado, recebo esta saída:

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

O que está causando esse erro?

Nota: usei este comando para compilar a fonte em um 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

O resultado parece ser uma 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
    
por Aaron Digulla 10.07.2013 / 10:58

1 resposta

0

DieHard autor aqui.

Em um sistema Linux de 64 bits, você deve criar o DieHard usando o seguinte comando make:

make linux-gcc-x86-64

Isso produzirá uma biblioteca compartilhada de 64 bits, que será utilizável por executáveis de 64 bits. Além disso, você pode depurar o código que depende de LD_PRELOAD definindo essa variável de ambiente dentro gdb:

$ gdb yourprogram
(gdb) set environment LD_PRELOAD /path/to/DieHard/src/libdiehard.so
(gdb) run
    
por 13.11.2015 / 17:43

Tags