我试图使用Xcode创建一个简单的Mac Objective-C应用程序,以保持两个玩家的得分,玩每个玩家最多36个分数的简单游戏。由于其功能有限,它不是一个非常实用的应用程序,它主要用于实践。我试图通过“首选项”窗口稍微扩展应用程序,当单击菜单项时会弹出该窗口。
我创建了一个文件来控制men项目,然后在点击它时弹出一个nib。所有这一切都运行良好,会弹出一个新窗口。我在笔尖上放置滑块,文本字段等,并将它们连接到动作。所有这些都很好。
当我尝试将文件导入我的根控制器以便我可以在应用程序中使用用户的选择时出现问题。
我收到了以下编译错误:
Command /Developer/usr/bin/clang failed with exit code 1
以及所有这些:
Ld的 “/用户/名为myUsername /库/开发商/ Xcode中/ DerivedData / SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml /编译/产品/调试/ SimpleScoreKeeper Mac.app/Contents/MacOS/SimpleScoreKeeper Mac“正常x86_64 cd“/ Users / myusername / Dropbox / iphone app / SimpleScoreKeeper Mac“ setenv MACOSX_DEPLOYMENT_TARGET 10.6 / Developer / usr / bin / clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -L /用户/名为myUsername /库/开发商/ Xcode中/ DerivedData / SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml /编译/产品/调试 -F /用户/名为myUsername /库/开发商/ Xcode中/ DerivedData / SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml /编译/产品/调试 -filelist “/用户/名为myUsername /库/开发商/ Xcode中/ DerivedData / SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml /编译/中间体/ SimpleScoreKeeper Mac.build/Debug/SimpleScoreKeeper Mac.build/Objects-normal/x86_64/SimpleScoreKeeper Mac.LinkFileList“ -mmacosx-version-min = 10.6 -framework Cocoa -o “/用户/名为myUsername /库/开发商/ Xcode中/ DerivedData / SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml /编译/产品/调试/ SimpleScoreKeeper Mac.app/Contents/MacOS/SimpleScoreKeeper Mac“
ld:重复符号_addScores in /用户/名为myUsername /库/开发商/ Xcode中/ DerivedData / SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml /编译/中间体/ SimpleScoreKeeper Mac.build/Debug/SimpleScoreKeeper Mac.build/Objects-normal/x86_64/Prefrences.o和 /用户/名为myUsername /库/开发商/ Xcode中/ DerivedData / SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml /编译/中间体/ SimpleScoreKeeper Mac.build/Debug/SimpleScoreKeeper 架构的Mac.build/Objects-normal/x86_64/RootController.o x86_64 clang:错误:链接器命令失败,退出代码为1(使用-v to 请参阅调用)Command / Developer / usr / bin / clang因退出代码而失败 1
我项目中的(可能)相关文件如下。
RootController.h - All the interface declarations for stuff in the MainMenu.xib window
RootController.m - Where I need to import the files to
MainMenu.xib - The nib owned by the RootController class
Preferences.h - A file I'd want to import, but it won't work.
Preferences.m - A file I'd (maybe) want to import, but it won't work.
Preferences.xib - The nib owned by the Preferences class.
PreferencesMenuController.h - Where I declare the clickPreferences action. (Liked to MainMenu.xib)
PreferencesMenuController.m - Where I say that clickPreferences opens up Preferences nib. (Linked to MainMenu.xib)
我有没有理由得到这个错误?在我导入的课程中是否需要做些什么?请相当详细,我是语言somight的新手,不知道如何做某些事情。如果有任何我需要澄清的内容,请告诉我。
编辑: 这是我无法导入的文件的代码。
#import "Preferences.h"
@implementation Preferences
int addScores;
- (IBAction)addScoresToggled
{
NSLog(@"addScores was toggled.");
}
- (id)initWithWindow:(NSWindow *)window
{
self = [super initWithWindow:window];
if (self) {
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (void)windowDidLoad
{
[super windowDidLoad];
}
@end
答案 0 :(得分:17)
您也可能会出现此错误,意外包含实施文件而不是头文件。例如#import“MyClass.m”而不是#import“MyClass.h”
答案 1 :(得分:9)
这就是ld: duplicate symbol _addScore
在您的项目中,您有多次_addScore文件。检查你的项目层次结构。
答案 2 :(得分:3)
收到完全相同的错误后,我注意到我在项目中以某种方式获得了两个同名的.h文件。从项目的文件夹中删除副本(而不仅仅是删除引用)为我解决了这个问题。
答案 3 :(得分:2)
我刚才遇到了这个问题,因为我有意外导入.m文件而不是.h文件。
对于尝试此答案的任何人:如果问题突然出现,请考虑一下您最近添加的#import
行(或者更好的是,在git中运行grep!)。
答案 4 :(得分:1)
select demo.xcodeproj
,显示包内容,删除名为project.xcworkspace
的文件和f xcuserdata
答案 5 :(得分:0)
我最近遇到了这个错误。您是从两个不同的文件导入相同的.h文件吗?这给我造成了这个错误。
答案 6 :(得分:0)
如果您希望变量addScore可以在多个文件中访问,则需要在一个.m文件中将其定义为:
int addScore;
并在关联的.h文件中将其声明为:
extern int addScore;
如果在声明中省略了“extern”关键字,那么编译器会将其视为每个文件中addScore的重新定义.h被导入/包含在其中。这会导致你看到的错误。
答案 7 :(得分:0)
在运行具有相同应用程序标识符的两个项目后,我遇到了同样的问题。
删除后(用您的帐户名替换< yourlogin>):
project.xcworkspace/xcuserdata/<yourlogin>.xcuserdatad/UserInterfaceState.xcuserstate
它开始在模拟器下运行但仍然没有在设备上运行,所以我关闭了所有已打开的项目,创建了一个新项目并在那里复制了文件,最后它工作了!
答案 8 :(得分:0)
使用RestKit时我遇到了同样的错误。我选择了RestKit目标并清理/构建它。然后我选择了我的主要目标(我的应用程序)并清理/构建它。为我修好了。
答案 9 :(得分:0)
我在Xcode 4.3和4.4下存档项目时遇到这种错误, 最后我从标准版(32/64位英特尔)切换到64位英特尔
时结束了这个错误答案 10 :(得分:0)
我有一个不同的原因:使用Xcode 4.4,当最小值为10.6时,部署目标设置为10.4。这解决了我。
答案 11 :(得分:0)
当我不小心点击了产品时,我遇到了这个错误 - &gt;测试,而不是产品 - &gt;跑。我刚刚点击了Product - &gt;清理了项目。干净,错误消失了。
答案 12 :(得分:0)
DUPLICATE或AMBIGUOUS标头或实施文件
当您导入的文件有多个潜在路径时,可能会发生这种情况。
例如,如果您导入MyClass.h
,但项目中有MyClass.h
的两个实例
答案 13 :(得分:0)
我的解决方案:
我在项目中导入了一些.h和.m文件。但是没有使用过我的任何课程。 所以我从finder中删除了那些。这导致了上述错误。
所以我不得不去项目设置/构建阶段=&gt;然后还删除那些文件引用。它们是红色的。因为它们已从finder中删除而不是从Xcode中删除