Как включить неструктурные библиотеки при написании документов CodeRunner? - PullRequest
4 голосов
/ 19 января 2012

Я использую CodeRunner для сбора небольших кусков кода, которые часто используются при разработке, но не обязательно принадлежат к базе кода для проекта.Это отличный инструмент для подведения итогов в Objective-C и Cocoa, потому что я могу включать в себя фреймворки, установленные на моем компьютере.

Однако иногда я хочу включить функциональность из внешних источников, которые не являются фреймворками, такими как ASIHTTPRequest,Если я помещаю файлы ASIHTTPRequest в ближайшую папку и #include их, я получаю ошибки о "Undefined symbols for architecture x86_64: _OBJC_CLASS_$_ASIHTTPRequest", что, как я предполагаю, означает, что файлы ASI просто не компилируются и не связаны с документом CodeRunner - это один файлфайл компилируется, а не проект.В XCode я бы добавил файлы ASIHTTPRequest в проект, и они будут автоматически скомпилированы и связаны с остальной частью кода, что эквивалентно, когда я не использую XCode?

Я могу включить пользовательские аргументы ифлаги компиляции (последний по умолчанию содержит -std=c99 -framework Foundation), и я подозреваю, что мне нужно как-то их подправить, но я не смог выяснить, как это сделать.

1 Ответ

3 голосов
/ 26 января 2012

Я получил его на работу. Конечно, gcc требует некоторых дополнительных параметров для связи с модулями ASIHTTP. Вот что я закончил:

-std=c99 -framework SystemConfiguration -framework CoreServices -framework Foundation -lz -I/path/to/asi-header-files -filelist /path/to/list-of-asi-compiled-modules

Я полагаю, что ваш код просто включал пути к заголовочным файлам ASIHTTPRequest.h и т. Д. ... если вы используете явные пути там, вам не нужен ключ -I выше. У gcc должна быть скомпилированная версия кода из ASIHTTPRequest.m и друзья для связи с ним. Один из способов сделать это - скомпилировать проект Mac, который поставляется вместе с библиотекой. Это создаст файлы .o в одном из тех глубоко закопанных каталогов «DerivedData», которые Xcode любит создавать. Тот, который он сделал для меня:

~/Library/Developer/Xcode/DerivedData/Mac-flsjygxmngizhzfwnfgcakejmwkx/Build/Intermediates/Mac.build/Debug/Mac.build/Objects-normal/x86_64

(Мне кажется, бит «Mac-flsjygxmngizhzfwnfgcakejmwkx» будет отличаться для вас.) В этом каталоге есть куча файлов .o и файл Mac.LinkFileList. Этот файл вы бы указали для параметра -filelist для gcc. Вам нужно будет удалить ссылки на файлы main.o, AppDelegate.o и ASIWebPageRequest.o, чтобы на шаге ссылки не возникало повторяющихся ошибок символов.

В дополнение к заголовку ASIHTTPRequest и файлам .o gcc будет ожидать связи с SystemConfiguration, платформами CoreServices и библиотекой zlib, поскольку ASIHTTPRequest имеет эти зависимости.

Если вы выполняете много тестов с этой библиотекой, я бы рекомендовал продублировать определение языка "Objective-C" (в разделе "Предпочтения") как "Objective-C с ASIHTTPRequest" или что-то в этом роде. Затем вы можете настроить флаги компиляции для запуска с ASIHTTPRequest без необходимости делать это для всего кода Objective-C, который вы запускаете.

Вы также можете скопировать файлы .o и файл «LinkFileList» в более постоянное место, на случай, если XCode уберет построившее дерево или что-то в этом роде.

...