2012-05-10 20 views
0

私はJNI経由でAndroidプロジェクトで使用されるC++コードベースを持っています(ビルドスクリプトなどはすべてAndroid固有です)。同じライブラリの古いバージョンを使用しているObjective Cプロジェクトを更新する必要があります。問題は、私はObjective Cコードだけを持っていますが、古いC++コードとiOS makefile(外部の代理店によって行われたもの)ではなく、バイナリの.aファイルだけです。 JNIコードから静的なiOSライブラリを生成するには、どうすればいいですか?私はこれを今読んでいる:http://www.clintharris.net/2009/iphone-app-shared-libraries/とあなたが助けに興味を持っている場合は、このポストをより詳細に更新します。Android NDKライブラリを静的なiOSライブラリにコンパイルする方法

答えて

0

お試しに問題がありますか?コードがクロスプラットフォームであり、iOS上で実行できるとすれば、新しいメイクファイル(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:*** No targets。 Stop.' – Gabor

+0

@ ber4444ここでは、iOS 5.0.1用のsqliteをビルドするMakefileの例を示します。かなりうっすらですが、一般的な概念を説明する必要があります。基本的には、この時点で標準のMakefilesを扱っています+ GCCやClang/LLVMのためのAppleのほんのいくつかのコマンドです:http://pastebin.com/ZyrsfT87 – NuSkooler

0

あなたは固まっています。 iOSとAndroidは同じABIを共有していません。リンカの魔法を使ってELF共有ライブラリからシンボルを引き出してMachバイナリにリンクすることができたとしても、引数の渡しやスタックフレームの設定などが異なるため、関数がクラッシュすることがありました(正直なところ、 iOSはEABIではありません)。これは、各機能のアセンブリレベルのサンク処理レイヤーを作成したり作成したりする場合には、ほんのわずかです。しかし、基本的に:あなたはSOLです。

+0

おかげで、私は、バイナリ互換性について考えていないよ - 私は、ソースファイルを持って、それらを構築する方法をただわからないがiOSの場合、およびNDK固有の部分を移植する方法について説明します。私の質問はすぐに詳細に更新されます。 – Gabor

関連する問題