2010-08-23 8 views
0

Je compile sur une architecture 64 bits avec le compilateur Intel intel. Le même code construit bien sur une architecture Intel 64 bits différente. Maintenant, quand j'essaye de construire les binaires, j'obtiens un message "Sauter incompatibles ../../libtime.a" ou quelque chose de ce genre, qui indique la libtime.a que j'ai archivée (à partir de certains fichiers objet J'ai compilé) n'est pas compatible. Je ai googlé et il semblait que c'était généralement le résultat d'un changement de 32-> 64 bits ou quelque chose comme ça, mais le compilateur C intel ne semble pas soutenir une option de -64 ou une autre mémoire au moment de la compilation. Comment puis-je résoudre et corriger cette erreur?Saut d'erreur incompatible lors de la liaison

+0

double possible de [Skipping Incompatible Bibliothèques à la compilation] (http://stackoverflow.com/questions/3119714/skipping-incompatible-libraries-at-compile) – user2284570

Répondre

1

Vous ne pouvez pas mélanger du code compilé 64 bits et 32 ​​bits. Instructions de configuration pour Linux are here.

+0

+1 En effet, il semble Derek tente de relier les bibliothèques 32bit avec 64bit ceux. – karlphillip

+0

Il s'avère que le système était IA-64, et d'une manière ou d'une autre quelqu'un a installé des compilateurs 32 bits dessus. Cela n'est pas devenu évident pour moi jusqu'à ce que j'ai fait un "fichier" sur les fichiers objets créés. – Derek

1

Vous devez déterminer le processeur cible de la bibliothèque et du nouveau code que vous créez. Cela peut se faire de plusieurs façons, mais le plus simple est:

$ objdump -f ../../libtime.a otherfile.o

Pour libtime ce sera probablement imprimer des bouquets de choses, mais ils devraient tous avoir le même processeur cible. Assurez-vous que otherfile.o (auquel vous devriez substituer un de vos fichiers objet) a également la même architecture. Gcc a les options -m32 et -m64 pour passer de la cible par défaut à un processeur similaire avec les différents registres et largeur de mémoire (généralement x86 et x86_64), ce qui peut également être le cas du compilateur Intel C.

Si cela n'a pas été utile, vous devez inclure les commandes (avec tous les indicateurs) utilisées pour tout compiler et également les informations sur les systèmes sur lesquels chaque commande était exécutée.

+0

merci pour le conseil, wasnt le problème cette fois, mais je me souviendrai de la commande objdump – Derek

Questions connexes