2012-05-10 3 views
0

У меня есть кодовая база C++, которая используется нашим Android-проектом через JNI (скрипты сборки и все такие Android-специфические). Мне нужно обновить наш проект Objective C, который использует более старую версию той же библиотеки. Проблема в том, что у меня есть только код Objective C, но не старый код на C++ и make-файлы iOS (они были сделаны внешним агентством) - только двоичный файл .a. Как я могу создать такую ​​статическую iOS-библиотеку из кода JNI, с чего начать? Я читаю это прямо сейчас: http://www.clintharris.net/2009/iphone-app-shared-libraries/ и обновит этот пост с более подробной информацией, если вы заинтересованы в помощи.как скомпилировать Android NDK lib на статическую iOS lib

ответ

0

У вас возникли определенные проблемы при попытке этого? Предполагая, что код является кросс-платформенным и может работать на iOS, вам просто нужно либо создать новый make-файл (специализированные Android), либо перетащить файлы в новый или существующий проект XCode.

Apple Clang может скомпилировать (и вы можете конечно смешивать) C, C++ и Obj-C. Если вам нужно, например, комбинировать Obj-C и C++, напишите свой файл .mm и идите.

Пример Makefile (примечание: небрежное, но должен иллюстрировать!): http://pastebin.com/ZyrsfT87

+0

спасибо @nuskooler, поэтому первый вопрос заключается в том, как преобразовать 'Application.mk' в сборку LLVM/GCC ... не удалось найти учебники по этому вопросу. Я вижу несколько «Makefile.Lib», которые тоже висят, но не уверены, что с ними делать, очевидно, просто получая «make: *** Нет целей. Stop.' – Gabor

+0

@ ber4444 вот пример Makefile, который создает sqlite для iOS 5.0.1. Это довольно неряшливо, но должно проиллюстрировать общую концепцию. В основном вы имеете дело со стандартными Makefile в этот момент + несколько дополнительных команд Apple только для GCC или Clang/LLVM: http://pastebin.com/ZyrsfT87 – NuSkooler

0

Вы застряли. iOS и Android не имеют одного и того же ABI. Даже если вы могли бы сделать магию компоновщика, чтобы вытащить символы из общей библиотеки ELF и связать их с двоичным файлом Mach, функции будут разбиваться, потому что такие вещи, как передача аргументов и установка стека кадров, отличаются (честно говоря, я не знаю деталей за исключением того, что iOS не EABI). Это просто невозможно, если вы готовы писать или создавать уровни thunking уровня сборки для каждой функции. Но в основном: вы SOL.

+0

благодаря @ ANDY-Россу, но я не думаю о бинарной совместимости - У меня есть исходные файлы, просто не знает, как их строить для iOS и как перенести часть, определенную NDK. В ближайшее время обновит мой вопрос. – Gabor

Смежные вопросы