未能执行';制作';在使用Mac的.c和.s文件上

未能执行';制作';在使用Mac的.c和.s文件上,c,macos,gcc,assembly,C,Macos,Gcc,Assembly,我正在尝试使用Mac编译一个包含.c和.s文件的简单项目。 当我运行'make'时,它会被抛出到编译中,我认为它在尝试链接时失败了(不确定) 下面是它显示的错误: gcc -m32 -g -Wall -c -o main.o main.c gcc -m32 -g -Wall -c -o numbers.o numbers.c nasm -g -f macho -w+all -o add.o add.s gcc -m32 -g -Wall -o run main.o numbers.o add.o

我正在尝试使用Mac编译一个包含.c和.s文件的简单项目。 当我运行'make'时,它会被抛出到编译中,我认为它在尝试链接时失败了(不确定)

下面是它显示的错误:

gcc -m32 -g -Wall -c -o main.o main.c
gcc -m32 -g -Wall -c -o numbers.o numbers.c
nasm -g -f macho -w+all -o add.o add.s
gcc -m32 -g -Wall -o run main.o numbers.o add.o
ld: malformed file
/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libSystem.tbd:4:18: error: unknown enumerated scalar
platform:        zippered
                 ^~~~~~~~
 file '/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/lib/libSystem.tbd'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [run] Error 1
我还将添加makefile:

run: main.o numbers.o add.o
    gcc -m32 -g -Wall -o run main.o numbers.o add.o
main.o: main.c
    gcc -m32 -g -Wall -c -o main.o main.c
numbers.o: numbers.c
    gcc -m32 -g -Wall -c -o numbers.o numbers.c
add.o: add.s
    nasm -g -f macho -w+all -o add.o add.s
.PHONY: clean
clean: 
    rm -f *.o run

MacOS使用macho而不是elf对象文件。不过,它确实使用了与Linux相同的用户空间函数调用约定,因此如果您没有从手写asm进行任何
int0x80
syscall
系统调用,您可能只需更改为
-f macho
。它确实用一个前导的
\uu
来装饰asm符号,而ELF/Linux没有。嗯,它看起来没有任何区别:/Makefile更改后,您是否
进行了清理?您的
.o
对Makefile本身没有make依赖性。。。如果您这样做了,请使用您现在收到的确切错误消息更新您的问题。如果它仍然包含
不支持的文件格式(0x7F 0x45 0x4C 0x46…
那么您的系统是疯狂的;这些ASCII码字面上拼写ELF,作为标识ELF文件的魔法数字的一部分。您一直在为哪个macOS版本编程?请注意,对32位代码的支持已从最新版本中删除。这可能是您观察到的问题。@YoavKeissar:您是否如果没有,不妨使用64位代码;32位代码对于您的主平台(MacOS)已经过时了,在其他地方基本上已经过时了。