GCC-m32 drapeau: /usr/bin/ld: ne pas sauter incompatible
Sur 64 bits hôte, je suis en train de construire des bibliothèques partagées avec -m32
option. Est-il possible pour ces bibliothèques à être lié avec régulièrement des bibliothèques 64 bits?
Je suis en train de faire quelque chose comme ceci:
g++ -m32 -shared source.cpp -l 64_bit_library.so -o 32_bit_library.so
et des messages d'erreur comme ceci:
/usr/bin/ld: skipping incompatible 64_bit_library.so
Donc ma question est: comment 64_bit_library.so
et 32_bit_library.so
doit être compilé avec la version 64 bits de l'hôte, pour le rendre possible pour 32_bit_library.so
être lié à l'encontre de 64_bit_library.so
?
OriginalL'auteur Vahagn | 2010-10-29
Vous devez vous connecter pour publier un commentaire.
Il n'est pas possible de lier les applications 32 bits contre bibliothèques 64 bits et vice versa. Le problème est que les pointeurs et types en général ne pouvez pas être passé entre eux. Normalement, la solution est de lancer un processus enfant de l'autre, de taille et d'utilisation de la CIB pour communiquer avec ce processus.
Pensez-y de cette façon: Si j'ai un C triviaux de la fonction:
Si c'est dans une version 64bit de la bibliothèque et j'essaie de l'appeler à partir d'un 32 bits bibliothèque où est l'autre moitié du pointeur de venir?
À l'inverse si il est en 32 bits bibliothèque et je l'appelle à partir d'une application 64 bits ce qui se passe à l'autre moitié du pointeur qui j'aurais à perdre?
pouvez-vous dire de toute façon comment vérifier que c'est incompatible ? à l'aide de readelf peut-être ? -- rzr.online.fr/q/gcc
La meilleure façon de vérifier serait juste pour utiliser le
file
de commande sur l'objet partagé et voir si elle correspond à ce que vous essayez de faire avec gcc. Vous pouvez travailler avecreadelf -h
ouobjdump -x
par exemple, bien que trop, mais je trouve la sortie defile
à être plus concis.OriginalL'auteur Flexo