Можете ли вы связать C ++ Linux-ориентированное приложение со статической библиотекой Objective-C? - PullRequest
2 голосов
/ 25 января 2012

Я видел много информации о том, как связать приложение Objective-C с библиотеками C ++, но можете ли вы поступить иначе?

Мои партнеры и я работали над приложением для iPhone, используяцеликом Objective-C.На полпути проекта мы решили добавить в него новую функцию.Эта функция потребует Push-уведомлений, поэтому нам нужно написать приложение на стороне сервера, которое будет работать на компьютере с Linux.Это серверное приложение нуждается в доступе к некоторой части кода, написанного на Objective-C.Я полагаю, у нас есть два варианта: переписать все это на C / C ++ или пересобрать код Objective-C в Linux.Поскольку переписывание заняло бы слишком много времени, я бы выбрал второй путь.

Мне удалось использовать GCC и GNUstep для компиляции классов Objective C, которые нам понадобятся для приложения сервера Linux, в статическую библиотеку.,Я хотел бы написать собственное серверное приложение на C ++, но мне нужно связать это приложение с библиотекой Objective-C.Это можно сделать?Как?

Если нет, может кто-нибудь подсказать мне, как это сделать?

1 Ответ

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

Gcc на вашем Linux-компьютере должен быть способен компилировать Objective-C вместе со стандартными базовыми классами, такими как NSString или NSArray. Вам может понадобиться apt-get интерфейс для gcc. Или еще лучше использовать LLVM.

Пока вы не используете библиотеки Apple в своем общем коде, у вас все будет в порядке, чтобы скомпилировать его в Linux.

Вы должны будете обернуть свои функциональные возможности Objective C в функции C, если вы хотите вызывать их из своего приложения C или C ++. Я дал некоторые рекомендации по этому вопросу в своем ответе на этот вопрос SO: есть ли способ использовать библиотеку Objective-C в C? .

РЕДАКТИРОВАТЬ : (чтобы ответить на вопросы комментариев)

Функция-обертка должна быть .m и должна быть скомпилирована с помощью компилятора Objective-C, так как она будет по-прежнему содержать код Objective-C и просто предоставлять простые функции .C . Это то же самое, что C API оболочка для кода C ++, все еще должна быть кодом C ++ - просто с определенными extern "C" функциями. В Objective-C вам нужно нет extern "C", так как Objective-C все еще C - та же связь и т. Д.

Вы можете использовать результирующую библиотеку с простым флагом -l в GCC-совместимых компиляторах.

Под библиотеками Apple я имею в виду нечто большее, чем NSFoundation.h - конкретные библиотеки iPhone - например, CocoaTouch .

NSFoundation.h определенно предоставляется вашим пакетом Objective-C / GNUStep.

...