No puedo compilar x64 LD_PRELOAD usando x86 g ++

¿Qué tiene de malo mi comando? Quiero compilar x64 ld_preload en x86 g++, comando:

g++ -fPIC -m64 -shared -Wl,-soname,test.so -ldl -o test.so test.cpp

error

En archivo incluido desde /usr/include/c++/4.4/bits/stl_tree.h:62, desde /usr/include/c++/4.4/set:60, desde test.cpp:17: /usr/include/c++/4.4 /bits/stl_algobase.h:60: error fatal: bits/c++config.h: no finalizó la compilación de dicho archivo o directorio. hacer: * [prueba.así] Error 1

Prueba de 17 líneas.cpp

#include <set>

Paquete g++-multilib instalado.

upd

Búsqueda de archivos:

#include <...> search starts here:
 /usr/include/c++/4.4
 /usr/include/c++/4.4/backward
 /usr/local/include
 /usr/lib/gcc/i686-linux-gnu/4.4.5/include
 /usr/lib/gcc/i686-linux-gnu/4.4.5/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

¡Gracias!

preguntado el 12 de junio de 12 a las 15:06

1 Respuestas

El archivo bits/c++config.h en la biblioteca GNU C++ depende de la arquitectura.

La versión de 32 bits está en

 /usr/include/c++/4.4/i486-linux-gnu/bits/c++config.h

o similar dependiendo de la distribución.

En la plataforma de 32 bits, la versión de 64 bits está en

 /usr/include/c++/4.4/i486-linux-gnu/64/bits/c++config.h

Editar

Para verificar en qué directorios se busca, escriba:

$ g++ -m64 -c -v test.cpp

Debería informar algo como

Using built-in specs.
Target: i486-linux-gnu
...
#include <...> search starts here:
 /usr/include/c++/4.4
 /usr/include/c++/4.4/i486-linux-gnu/64
 /usr/include/c++/4.4/backward
 /usr/local/include
 /usr/lib/gcc/i486-linux-gnu/4.4.1/include
 /usr/lib/gcc/i486-linux-gnu/4.4.1/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

Necesitas comprobar si

 /usr/include/c++/4.4/i486-linux-gnu/64

está en la lista.

Compruebe también que el archivo

/usr/include/c++/4.4/i486-linux-gnu/64/bits/c++config.h

existe.

Respondido el 12 de junio de 12 a las 19:06

No hay ningún directorio x86_64-linux-gnu, solo i486-linux-gnu e i686-linux-gnu. ¿Cómo puedo agregarlo con -I? - Robert

¿En qué directorio se debe buscar y qué archivo debe estar allí? Confundí una oferta... - Robert

@Robert ¿Llegas más lejos cuando corres? g++ -fPIC -m64 -shared -Wl,-soname,test.so -ldl -I/usr/include/c++/i?86-linux-gnu/64 -o test.so test.cpp? - Dmitri Chubárov

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.