Как я могу заставить Textmate работать с импортными файлами?
-
26-10-2019 - |
Вопрос
Я использую Textmate, чтобы выполнить некоторые упражнения для объективных C. Когда все в одном файле, все работает нормально, но как только я хочу работать с несколькими файлами, это дает ошибку. Например, у меня есть отдельная Rectangle.h
Файл для импорта:
#import "Rectangle.h"
int main (int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Rectangle *rectangle = [[Rectangle alloc] init];
[pool drain];
return 0;
}
Запуск дает эту ошибку:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_Rectangle", referenced from:
objc-class-ref in ccccStDD.o
ld: symbol(s) not found for architecture x86_64
Я использую команду «запустить» в C -Bundle. Использование команды Xcode Bundle «Build & Run» дает мне другую ошибку.
Как я могу сделать Textmate импортировать мой Rectangle.h
файл и запустить?
Решение
Это не ошибка компилятора, а ошибка линкера. Ваш импорт должен быть в порядке, если он находится в том же каталоге, что и ваш основной файл.
Я думаю, у вас также должен быть Rectangle.m
файл. Вам нужно скомпилировать оба файла (Rectangle.m
и ваш основной файл) в виде объектных файлов (с -c
аргумент), а затем свяжите их вместе, чтобы создать исполняемый файл.
Или просто собирайте оба файла вместе:
gcc -Wall -framework Foundation -o test test.m Rectangle.m
Обратите внимание, что если ваши файлы заголовка находятся в отдельном каталоге, вы можете указать его в GCC, используя -i
или же -I
аргументы.
РЕДАКТИРОВАТЬ:
Я только что видел упоминание о XCODE. Вы используете Xcode или Textmate?
Если вы компилируете с использованием xcode и получите ошибку, вполне вероятно, что ваш Rectangle.m
Файл не является частью вашей основной цели XCODE.