web-dev-qa-db-fra.com

c) faire erreur et problème de liaison: i386: architecture x86-64 du fichier d'entrée, incompatible avec la sortie i386

J'ai cette sortie avec un message d'erreur lorsque je tape "make" dans le terminal !!

gcc test1.o dispatchQueue.o -o test1 -pthread
/usr/bin/ld: i386:x86-64 architecture of input file `test1.o' is incompatible with i386     output
/usr/bin/ld: final link failed: Invalid operation
collect2: ld returned 1 exit status
make: *** [test1] Error 1

Y a-t-il quelqu'un qui peut expliquer pourquoi et comment y remédier? :(

J'attache un makefile juste au cas où

# Comment out the targets you don't want.

# Runs all of the tests.
all: test1 test2 test3 test4 test5 testFor
    ./test1
    ./test2
    ./test3
    ./test4
    ./test5
    ./testFor

test1: test1.o dispatchQueue.o
    gcc test1.o dispatchQueue.o -o test1 -pthread

test1.o: test1.c
    gcc -c test1.c

test2: test2.o dispatchQueue.o
    gcc test2.o dispatchQueue.o -o test2 -pthread

test2.o: test2.c
    gcc -c test2.c

test3: test3.o dispatchQueue.o
    gcc test3.o dispatchQueue.o -o test3 -pthread

test3.o: test3.c
    gcc -c test3.c

test4: test4.o dispatchQueue.o
    gcc test4.o dispatchQueue.o -o test4 -pthread

test4.o: test4.c
    gcc -c test4.c

test5: test5.o dispatchQueue.o
    gcc test5.o dispatchQueue.o -o test5 -pthread

test5.o: test5.c
    gcc -c test5.c

testFor: testFor.o dispatchQueue.o
    gcc testFor.o dispatchQueue.o -o testFor -pthread

testFor.o: testFor.c
    gcc -c testFor.c

dispatchQueue.o: dispatchQueue.c dispatchQueue.h
    gcc -c dispatchQueue.c
23
user890040

Vous avez probablement d'anciens fichiers (au moins test1.o) compilés pour i386-x64. Vous pouvez supprimer ces anciens fichiers et relancer make. Si vous pouvez modifier le Makefile, essayez d'ajouter une ligne telle que:

clean:
    rm *.o test1 test2 test3 test4 test5 testFor

Ensuite, lorsque vous exécutez make clean cela supprimera les anciens éléments, à quel point vous pouvez relancer make.

36
Kenji

J'ai eu un problème similaire. Le problème pour moi était que les fichiers objets ont été générés avec l'architecture i386 et j'essayais de créer un lien avec l'éditeur de liens x86_64. J'ai supprimé les fichiers objets et les ai générés à nouveau avec les options x86_64 et j'ai essayé de relier à nouveau. Ça fonctionne maintenant

4
mopa

Si le makefile est généré pour le système, vous devez exécuter ./configure pour en obtenir de nouveaux, puis recompiler.

2
Tama