Ответ 1
Вы также можете получить эту ошибку, случайно включив файл реализации, а не файл заголовка. например #import "MyClass.m" вместо #import "MyClass.h"
Я пытался создать простое приложение для Mac Objective-C с Xcode, чтобы счет двух игроков играл в простую игру с до 36 баллов за игрока. Это не очень практичное приложение из-за его ограниченных возможностей, и это в основном для практики. Я пытался немного расширить приложение с окном "Настройки", которое будет отображаться при щелчке элемента меню.
Я создал файл для управления элементом men, а затем щелкнул значок, когда он щелкнул. Все это отлично работало, и появилось новое окно. Я помещаю ползунки, текстовые поля и т.д. На наконечник и подключаю их к действиям. Все это отлично работало.
Проблема возникла, когда я попытался импортировать файлы в свой корневой контроллер, чтобы я мог использовать пользовательские варианты в приложении.
У меня возникла следующая ошибка компилятора:
Command /Developer/usr/bin/clang failed with exit code 1
Наряду со всем этим:
Ld "/Users/MyUserName/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Products/Debug/SimpleScoreKeeper Mac.app/Contents/MacOS/SimpleScoreKeeper Mac" normal x86_64 cd "/Пользователи/myusername/Dropbox/iphone приложение /SimpleScoreKeeper Mac" setenv MACOSX_DEPLOYMENT_TARGET 10.6 /Разработчик/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX 10.6.sdk -L/Пользователи/MyUserName/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Products/Debug -F/Users/MyUserName/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Products/Debug -filelist "/Users/MyUserName/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/полупродукты/SimpleScoreKeeper Mac.build/Debug/SimpleScoreKeeper Mac.build/Objects-normal/x86_64/SimpleScoreKeeper Mac.LinkFileList" -mmacosx-version-min = 10.6 -framework Cocoa -o "/Users/MyUserName/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Products/Debug/SimpleScoreKeeper Mac.app/Contents/MacOS/SimpleScoreKeeper Mac"
ld: дублировать символ _addScores в /Users/MyUserName/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper _Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/полупродукты/SimpleScoreKeeper Mac.build/Debug/SimpleScoreKeeper Mac.build/Objects-normal/x86_64/Prefrences.o и /Users/MyUserName/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper _Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/полупродукты/SimpleScoreKeeper Mac.build/Debug/SimpleScoreKeeper Mac.build/Objects-normal/x86_64/RootController.o для архитектуры x86_64 clang: ошибка: команда компоновщика не удалась с кодом выхода 1 (используйте -v для см. вызов) Команда/Разработчик/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)
Есть ли причина, по которой я получаю эту ошибку? Нужно ли что-то делать в классе, который я импортирую? Пожалуйста, будьте очень детализированы, я новичок в языке, но не знаю, как делать определенные вещи. И если мне что-то нужно уточнить, дайте мне знать.
EDIT: Вот код для файла, который я не могу импортировать.
#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
Вы также можете получить эту ошибку, случайно включив файл реализации, а не файл заголовка. например #import "MyClass.m" вместо #import "MyClass.h"
Вот почему ld: duplicate symbol _addScore
В вашем проекте у вас есть файл _addScore более одного раза. проверьте свою иерархию проектов.
После получения той же самой ошибки, я заметил, что я каким-то образом получил два файла .h с тем же именем в моем проекте. Удаление дубликата из папки проекта (а не только удаление ссылки) решило проблему для меня.
Я столкнулся с этой проблемой только сейчас, потому что у меня был случайно импортированный файл .m для класса вместо файла .h.
Для тех, кто пытается ответить на этот вопрос: если проблема возникла внезапно, подумайте о том, какие строки #import
вы добавили недавно (или, еще лучше, запустите grep в git!).
select demo.xcodeproj
, покажите содержимое пакета, удалите файл с именем project.xcworkspace
и f xcuserdatap >
Недавно я столкнулся с этой ошибкой. Вы импортируете один и тот же файл .h из двух разных файлов? Это вызвало эту ошибку для меня.
Если вы хотите, чтобы переменная addScore была доступна в нескольких файлах, вам необходимо определить ее в одном файле .m как:
int addScore;
и объявить его в ассоциированном файле .h как:
extern int addScore;
Если в объявлении отсутствует ключевое слово "extern", тогда компилятор видит это как переопределение addScore в каждом файле .h импортируется/включается в. Это приведет к ошибке, которую вы видите.
У меня была такая же проблема после запуска двух проектов с одинаковыми идентификаторами приложений.
После удаления (замените <yourlogin> с именем своей учетной записи):
project.xcworkspace/xcuserdata/<yourlogin>.xcuserdatad/UserInterfaceState.xcuserstate
он начал работать под симулятором, но все еще не был на устройстве, поэтому я закрыл все открытые проекты, создал новый и скопировал файлы там, и, наконец, он сработает!
При использовании RestKit я столкнулся с такой же ошибкой. Я выбрал цель RestKit и очистил/построил ее. затем я выбрал свою основную цель (мое приложение) и очистил/построил ее. это исправило это для меня.
Я встречаю такую ошибку, когда я архивирую проект под Xcode 4.3 и 4.4, и, наконец, я закончил эту ошибку при переключении с Standard (32/64-bit Intel) на 64-bitIntel
У меня была другая причина: с использованием Xcode 4.4 для цели развертывания было установлено 10.4, когда минимум составлял 10.6. Это решило для меня.
Я столкнулся с этой ошибкой, когда случайно щелкнул Product → Test, а не Product → Run. Я просто очистил проект, нажав "Продукт" → "Очистить", и ошибка исчезла.
DUPLICATE или AMBIGUOUS заголовок или файлы реализации
Это может произойти, когда есть несколько потенциальных путей к файлам, которые вы импортируете.
Например, если вы импортируете MyClass.h
, но в вашем проекте есть два экземпляра MyClass.h
мое решение:
Я импортировал некоторые файлы .h и .m в свой проект. но не использовали его ни в одном из моих классов. поэтому я удалил их из поисковика. это вызвало указанную выше ошибку.
поэтому мне пришлось перейти к настройке/сборке проекта = > затем удалить эти ссылки на файлы. они были красного цвета. потому что они были удалены из искателя не из Xcode