c )make error& link problem: i386:x86-64 architecture of input file, incompatible with i386 output

72,664

Solution 1

You probably have some old files (at least test1.o) compiled for i386-x64. You can remove these old files and run make again. If you can modify the Makefile try adding a line such as:

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

Then when you run make clean it'll remove the old stuff, at which point you can run make again.

Solution 2

I had similar problem. Problem for me was that object files were generated with i386 arichitecture and I was trying to link with x86_64 linker. I deleted object files generated them anew with x86_64 options and tried to linking again. It works now

Solution 3

If the makefile is generated for the system, you should run ./configure to get new ones, and then recompile.

Share:
72,664

Related videos on Youtube

user890040
Author by

user890040

Updated on May 03, 2020

Comments

  • user890040
    user890040 about 4 years

    I have this output with error message when i type "make" in 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
    

    Is there anyone who can explain why and how to fix it? :(

    I'm attaching makefile just in case

    # 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
    
    • user786653
      user786653 almost 13 years
      Paste the Makefile. But the problem, as it is telling you, is that some of the files have been compiled (implicitly or explicitly with -m64) while the link target (and possibly other object files) are handled with -m32.
    • user786653
      user786653 almost 13 years
      The Makefile looks fine (except you should really use the -pthread switch on everyfile). Perhaps you've moved the project from another machine, have you tried removing the object files and recompiling?
    • user890040
      user890040 almost 13 years
      Hm.. no.. I actually tried this at uni and worked fine(actually Makefile is given by the lecturer haha).. hmm how to you remove the object files?
  • Havelock
    Havelock almost 12 years
    +1 I just had the same problem and Google brought me here. After running make clean it worked :)