当我在终端输入“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
有没有人可以解释为什么以及如何解决它? :(
我正在附加makefile以防万一
# 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
答案 0 :(得分:36)
你可能有一些为i386-x64编译的旧文件(至少是test1.o)。您可以删除这些旧文件并再次运行make。如果您可以修改Makefile,请尝试添加以下行:
clean:
rm *.o test1 test2 test3 test4 test5 testFor
然后当你运行make clean
时,它会移除旧的东西,此时你可以再次运行make。
答案 1 :(得分:4)
我有类似的问题。对我来说问题是目标文件是用i386 arichitecture生成的,我试图链接x86_64链接器。我删除了使用x86_64选项重新生成它们的目标文件,并尝试再次链接。它现在有效
答案 2 :(得分:2)
如果为系统生成了makefile,则应运行./configure以获取新的,然后重新编译。