私は、JNI を介して Android プロジェクトで使用される C++ コードベースを持っています (ビルド スクリプトなどはすべて Android 固有です)。同じライブラリの古いバージョンを使用している Objective C プロジェクトを更新する必要があります。問題は、Objective C コードしかなく、古い C++ コードと iOS メイクファイル (外部機関によって作成されたもの) がなく、バイナリの .a ファイルしかないことです。JNIコードからそのような静的iOSライブラリを生成するにはどうすればよいですか?どこから始めればよいですか? 私は今これを読んでいます: http://www.clintharris.net/2009/iphone-app-shared-libraries/そして、あなたが助けることに興味があれば、この投稿をより詳細に更新します.
2 に答える
これを試す際に特定の問題がありますか?コードがクロス プラットフォームであり、iOS で実行できると仮定すると、新しい makefile を作成するか (Android は特殊化されています)、ファイルを新規または既存の XCode プロジェクトにドラッグするだけです。
Apple の Clang は、C、C++、および Obj-C をコンパイルできます (もちろん、混在させることもできます)。たとえば、Obj-C と C++ を混在させる必要がある場合は、ファイルに .mm という名前を付けてください。
Makefile の例 (注: ずさんですが説明する必要があります!): http://pastebin.com/ZyrsfT87
あなたは立ち往生しています。iOS と Android は同じ ABI を共有しません。ELF 共有ライブラリからシンボルを取り出して Mach バイナリにリンクするリンカー マジックを実行できたとしても、引数の受け渡しやスタック フレームのセットアップなどが異なるため、関数がクラッシュします (正直なところ、詳細はわかりません)。ただし、iOS は EABI ではありません)。これは、関数ごとにアセンブリ レベルのサンク レイヤーを記述または生成する意思がある場合、ほとんど不可能です。しかし、基本的に: あなたは SOL です。