#c #objective-c #g #runtime-error
#c #objective-c #g #ошибка во время выполнения
Вопрос:
Я создал действительно небольшой проект с использованием Objective-C, и если я запускаю его с помощью Xcode, он работает действительно хорошо.
Но мне нужно скомпилировать его, используя приведенные ниже командные строки:
g Main.mm -o Main `gnustep-config --objc-flags` `gnustep-config --base-libs` -O2 -DONLINE_JUDGE -DBOJ
Эта командная строка — это то, что сайт, на который я пытаюсь загрузить свой код для компиляции, использует для компиляции проектов Objective-C.
Но всякий раз, когда я компилирую эту командную строку, я получаю ошибки времени выполнения для использования NSMutableArray
, NSSet
и NSString
.
Ошибки:
zsh: command not found: gnustep-config
zsh: command not found: gnustep-config
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_NSMutableArray", referenced from:
objc-class-ref in Main-49f6e3.o
"_OBJC_CLASS_$_NSSet", referenced from:
objc-class-ref in Main-49f6e3.o
"_OBJC_CLASS_$_NSString", referenced from:
objc-class-ref in Main-49f6e3.o
"___CFConstantStringClassReference", referenced from:
CFString in Main-49f6e3.o
"_objc_msgSend", referenced from:
_main in Main-49f6e3.o
"_objc_opt_new", referenced from:
_main in Main-49f6e3.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
И вот мой исходный код:
#import <Foundation/Foundation.h>
int main(void) {
int num = 0;
int answer = 0;
scanf("%i", amp;num);
NSMutableArray *cl = [NSMutableArray new];
for (int k = 0; k < num; k ) {
char str[4];
getchar();
scanf("%[^n]s", str);
NSString *userInput = [NSString stringWithUTF8String:str];
if (userInput.length == 1) {
[cl removeObjectAtIndex:0];
} else {
[cl addObject:[userInput substringFromIndex:[userInput length] - 1]];
}
NSMutableArray *result = [NSMutableArray new];
for (int i = 1; i <= cl.count; i ) {
for (int j = 0; j <= cl.count-i; j ) {
[result addObject:[[cl subarrayWithRange:NSMakeRange(j, i)] componentsJoinedByString:@""]];
}
}
answer = [[NSSet setWithArray:result] allObjects].count;
}
printf("%dn", answer%1000000007);
return 0;
}
Ответ №1:
Это ошибки компоновщика, а не ошибки времени выполнения.
Вам необходимо выполнить ссылку на objc
библиотеку и Foundation
фреймворк. Попробуйте:
g Main.mm -lobjc -framework Foundation ...
Комментарии:
1. Но сайт, который я использую, не поддерживается мной. Поэтому я не могу так скомпилировать. Должен ли я сообщить сопровождающему сайта, чтобы исправить это?
objc #import <Foundation/Foundation.h> int main (void) { NSInteger a,b; scanf("%d %d",amp;a,amp;b); printf("%dn",a b); return 0; }
И этот код отлично работает на сайте.2. Да, я бы поговорил с ними. Код в вашем комментарии не использует основные функции Foundation, вот почему он работает.