Компиляция файлов Objective-C в объектные файлы (.o) - PullRequest
2 голосов
/ 30 сентября 2011

Мне было поручено создать объектные файлы .o для проекта iOS в Xcode 4. Я попробовал следующую команду, которая работает с классами NSObject

gcc -c implemtationfile.m

но если я попытаюсь выполнить команду для класса, унаследованного от UIViewController, например, я получу массу ошибок, начиная с

UIKit/UIKit.h: No such file or directory

Во-вторых, поскольку в проекте несколько файлов, возможно ли создать один файл .o для всех исходных файлов?

1 Ответ

4 голосов
/ 30 сентября 2011

Не удивлен, что у вас есть ошибки.

Вы пытаетесь скомпилировать код iOS из OSX. Если вы вызываете GCC из терминала, вы получите компилятор Mac OS X.

Даже если он может создавать файлы .o, эти объектные файлы являются объектными файлами Mach-O, то есть они компилируются как объектные файлы в цепочку инструментов компилятора Mac OS X.

Здесь нет iOS. Ваши объектные файлы будут иметь архитектуру Intel (x86) или PPC. iPhone это ARM, так что вы впустую.

Вы должны иметь возможность обрабатывать объектные файлы ARM, используя правильную цепочку инструментов компилятора GCC.

Что-то вроде:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.0.1

Я не тестировал, но ясно, что вам нужно использовать версию GCC для iPhone ARM. Просто вызов GCC вызовет версию Mac OS X (в /usr/bin/).

Компилятор, такой как GCC, должен быть скомпилирован для хоста и целевой архитектуры.

Архитектура хоста - это архитектура, в которой вы будете вызывать компилятор. Целевой является архитектура, для которой вы будете создавать двоичные файлы или объектные файлы.

Поэтому попробуйте скомпилировать свой код с правильной версией GCC, которая соответствует целевой архитектуре iPhone.

Также обратите внимание, что при компиляции на платформе следует использовать аргумент -framework GCC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...