c) Fehler machen und Linkproblem: i386:x86-64-Architektur der Eingabedatei, inkompatibel mit der i386-Ausgabe

Lesezeit: 3 Minuten

Ich habe diese Ausgabe mit Fehlermeldung, wenn ich “make” im Terminal eingebe !!

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

Gibt es jemanden, der erklären kann, warum und wie man es repariert? 🙁

Ich hänge Makefile nur für den Fall an

# 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

  • Fügen Sie das Makefile ein. Aber das Problem, wie es Ihnen sagt, ist, dass einige der Dateien kompiliert wurden (implizit oder explizit mit -m64), während das Verknüpfungsziel (und möglicherweise andere Objektdateien) behandelt werden -m32.

    – Benutzer786653

    11. August 2011 um 13:51 Uhr

  • Das Makefile sieht gut aus (außer Sie sollten wirklich die -pthread schalte everyfile ein). Vielleicht haben Sie das Projekt von einem anderen Computer verschoben, haben Sie versucht, die Objektdateien zu entfernen und neu zu kompilieren?

    – Benutzer786653

    11. August 2011 um 13:58 Uhr

  • Hm .. nein .. Ich habe das tatsächlich an der Uni ausprobiert und es hat gut funktioniert (eigentlich wird Makefile vom Dozenten gegeben, haha). Hmm, wie entfernt man die Objektdateien?

    – Benutzer890040

    11. August 2011 um 23:18 Uhr

Wahrscheinlich haben Sie einige alte Dateien (mindestens test1.o) für i386-x64 kompiliert. Sie können diese alten Dateien entfernen und make erneut ausführen. Wenn Sie das Makefile ändern können, versuchen Sie, eine Zeile wie die folgende hinzuzufügen:

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

Dann beim Laufen make clean Es wird das alte Zeug entfernen, an diesem Punkt können Sie make erneut ausführen.

  • +1 Ich hatte gerade das gleiche Problem und Google hat mich hierher gebracht. Nach dem Rennen make clean es funktionierte 🙂

    – Havelock

    1. Juli 2012 um 12:41 Uhr

Ich hatte ein ähnliches Problem. Das Problem für mich war, dass Objektdateien mit i386-Architektur generiert wurden und ich versuchte, mit dem x86_64-Linker zu verknüpfen. Ich habe Objektdateien gelöscht, sie mit x86_64-Optionen neu generiert und erneut versucht, sie zu verknüpfen. Es funktioniert jetzt

Wenn das Makefile für das System generiert wird, sollten Sie ./configure ausführen, um neue zu erhalten, und dann neu kompilieren.

1340760cookie-checkc) Fehler machen und Linkproblem: i386:x86-64-Architektur der Eingabedatei, inkompatibel mit der i386-Ausgabe

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy