web-dev-qa-db-ja.com

c)エラーとリンクの問題を作成:i386:x86-64アーキテクチャの入力ファイル、i386出力との互換性なし

ターミナルで「make」と入力すると、エラーメッセージが表示されます。

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

それを修正する理由と方法を説明できる人はいますか? :(

念のためメイクファイルを添付しています

# 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

おそらく、いくつかの古いファイル(少なくともtest1.o)がi386-x64用にコンパイルされています。これらの古いファイルを削除して、再度makeを実行できます。 Makefileを変更できる場合は、次のような行を追加してください。

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

その後、make cleanを実行すると古いものが削除され、その時点でmakeを再度実行できます。

36
Kenji

同様の問題がありました。私にとっての問題は、オブジェクトファイルがi386 arichitectureで生成され、x86_64リンカーとリンクしようとしていたことでした。 x86_64オプションで新しく生成されたオブジェクトファイルを削除し、再度リンクしようとしました。今すぐ動く

4
mopa

システム用のmakefileが生成されている場合、。/ configureを実行して新しいものを取得し、再コンパイルする必要があります。

2
Tama