每当我尝试编译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
答案 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
文件夹并重新构建。