Xcode重复符号_main

时间:2010-03-29 00:58:33

标签: iphone xcode titanium xcodebuild

每当我尝试编译Appcelerator Titanium生成的任何iPhone应用程序时,我在Snow Leopard 10.6.2上的Xcode 3.2.1中都会出现以下错误。但是,仅当我在架构菜单上选择iPhone模拟器时才会出现构建错误,如果我选择iPhone设备,我可以在我的设备上运行该应用程序。

此外,iPhone模拟器成功启动并直接从使用Xcode构建的Titanium环境执行程序。

为什么会这样?

  

ld: duplicate symbol _main in Resources/libTitanium.a(main.o) and /Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build/Objects-normal/i386/main.o collect2: ld returned 1 exit status Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

11 个答案:

答案 0 :(得分:19)

我不能告诉你为什么会这样,但我可以建议一个解决方法。当我注释掉为我的Titanium项目生成的main.m文件的全部内容时,我能够成功编译并在模拟器上运行。如果这对您有用,请告诉我。

答案 1 :(得分:11)

检查项目中是否有多个main函数声明。

答案 2 :(得分:8)

我只花了几个小时与这一个人作战。这是因为我使用的是-all_load链接器标志。如果您使用该标志来解决类别错误,还有其他一些解决方案 - 请参阅here

答案 3 :(得分:6)

我有类似的问题。我的构建中意外地包含了一个单元测试类。如果你在项目中搜索“main”,你可能会找到重复的函数。

答案 4 :(得分:1)

这件事发生在我身上有两个原因:

1:A类调用B类,两者都导入了同一个类。通过在.m文件中导入类来修复它。

2:两个类具有相同名称的常量(即使在.m文件中定义了常量)。通过更改常量的名称来修复它。

答案 5 :(得分:1)

我遇到了这个问题,因为我这样定义了一个文件:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
... 
} 

还有一个文件main.m:

int main(int argc, char* argv[])
{
    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
        return retVal;
    }
}

答案 6 :(得分:0)

我发现这发生在我有一个带有main函数的实现文件(比如abc.m)并且还有另一个main.m时。一旦我在abc.m中注释掉了main函数,项目就会成功编译。

答案 7 :(得分:0)

似乎有多种方法可以进入这种状态。我的不同。我读了一个提示,您可以从.xib事件选择器拖动到视图控制器的.h实现中,它会自动生成您的方法。它确实 - 很酷。我立即开始收到重复的符号错误 - 这并不酷。

我没有时间深入研究链接器,看看发生了什么。我创建了一个新的视图控制器,将旧的.xib的上下文复制到新的人。删除旧的.h,.m和.xib并构建并重新运行。非常奇怪,非常讨厌浪费时间。

这个xcode“方便”显然存在一些错误。

答案 8 :(得分:0)

根据我从其他答案中可以看出的内容,我将需要删除一堆main方法。

但要轻松做到这一点,我首先需要从我的文件中删除所有gd注释,因为它们在几乎所有其他行中都刻意地记录了评论

这个正则表达式匹配所有C多行注释,包括它们的分界符和&可以帮助你旅行

/\*((?!\*/).)*\*/

答案 9 :(得分:0)

我花了一个多小时寻找正确答案,但没有任何对我有用。 最后它自己说的东西是重复的xcode,所以去那个特定的文件夹(在这种情况下:/Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build/ Objects-normal / i386 / main.o)并删除所有文件,并在项目中检查相同的是否是特定的类/接口,如果是,则删除它。

删除后清理并运行项目。

它对我有用,希望这有助于(-_-)。

答案 10 :(得分:-1)

删除/Users/{username}/Library/Developer/Xcode/DerivedData文件夹并重新构建。