10

每当我尝试编译由 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

4

11 回答 11

19

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

于 2010-03-29T01:09:20.847 回答
11

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

于 2011-01-30T06:54:05.877 回答
8

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

于 2011-02-02T17:05:22.400 回答
6

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

于 2011-04-07T15:48:01.983 回答
1

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

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

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

于 2012-08-14T21:30:48.970 回答
1

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

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

还有一个文件 main.m:

int main(int argc, char* argv[])
{
    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
        return retVal;
    }
}
于 2015-08-08T21:23:22.383 回答
0

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

于 2011-02-19T00:32:38.127 回答
0

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

我没有时间深入研究链接器以查看发生了什么。我创建了一个新的视图控制器,将我的旧 .xib 的上下文复制到新人中。删除了旧的 .h、.m 和 .xib 并构建,它再次工作。很奇怪,很烦人的时间浪费。

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

于 2012-09-15T14:46:39.007 回答
0

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

但要轻松做到这一点,我首先需要从我的文件中删除所有 gd 注释,因为它们在几乎每隔一行都有注释记录

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

/\*((?!\*/).)*\*/
于 2014-02-24T13:42:44.533 回答
0

我花了一个多小时寻找正确的答案,但对我没有任何帮助。最后,它自己告诉某些东西的xcode被复制了,所以转到那个特定的文件夹(在这种情况下:/Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build/ Objects-normal/i386/main.o) 并删除所有文件,并在项目中检查是否该特定类/接口被声明两次,如果是,则删除它。

删除后清理并运行项目。

它对我有用,希望这会有所帮助(-_-)。

于 2017-05-18T09:58:11.647 回答
-1

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

于 2017-10-23T21:49:22.927 回答