我收到以下错误。我为什么要这样做?
重复符号_main: /Users/AlexBomnd/Library/Developer/Xcode/DerivedData/Backpack-gcnxteerautalugwepzkevaqgtxe/Build/Intermediates/Backpack.build/Debug-iphonesimulator/Backpack.build/Objects-normal/x86_64/main.o /Users/AlexBomnd/Library/Developer/Xcode/DerivedData/Backpack-gcnxteerautalugwepzkevaqgtxe/Build/Intermediates/Backpack.build/Debug-iphonesimulator/Backpack.build/Objects-normal/x86_64/AppDelegate-2D6246B5E95B9D9F.o ld:1个用于体系结构x86_64 clang的重复符号:错误:链接器 命令失败,退出代码为1(使用-v查看调用)
答案 0 :(得分:1)
main.m
和AppDelegate.m
(或许AppDelegate.swift
)都包含函数main
。每个程序只能存在一个main
函数,因为它是任何C,Objective-C或Swift程序的唯一入口点。
更多信息:
程序的编译实际上是一系列单独的步骤。
每个项目都由一系列编译单元组成。在Objective-C中,每个.m
文件都是一个编译单元。在C中,它是.c
文件。在Swift中,所有.swift
文件的组合是一个模块(相当于其他模块的编译单元)。其中每个都是独立编译的,以生成一系列目标文件(.o
,如您在错误中所示)。
您的程序已编译并成功通过此步骤。
在编译各个编译单元之后,生成的目标文件通过名为链接器的程序链接,以生成文件程序。在链接步骤期间,链接器会遇到错误,因为main.o
文件(从main.m
编译的对象)和AppDelegate-2D6246B5E95B9D9F.o
文件(从AppDelegate.m
编译的对象或AppDelegate.swift
)包含符号 _main
的定义。链接器不知道要选择哪两个,因此会引发错误。