c) FAIRE ERREUR& problème de lien: i386:x86-64 architecture de fichier d'entrée, incompatible avec la sortie i386

j'ai cette sortie avec 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 le réparer? : (

je joins 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
19
demandé sur user890040 2011-08-11 17:48:34

3 réponses

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

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

puis quand vous courez make clean il va enlever les vieux trucs, à quel point vous pouvez exécuter faire à nouveau.

34
répondu Kenji 2011-08-12 03:46:04

j'ai eu le même problème. Le problème pour moi était que les fichiers objets étaient générés avec l'architecture i386 et j'essayais de faire le lien avec le linker x86_64. J'ai supprimé les fichiers objets générés à nouveau avec les options x86_64 et j'ai essayé de les lier à nouveau. Il fonctionne maintenant

3
répondu mopa 2013-07-24 12:25:11

Si le makefile généré par le système, vous devez exécuter ./ configurer pour en obtenir de nouvelles, puis recompiler.

2
répondu Tama 2012-12-01 13:55:02