2016-05-16 5 views
0

私はliblzmaを使用するiOSアプリケーションを持っています。私は現在、ソースコードを.aファイルにコンパイルするためのクロスプラットフォームのコンパイルスクリプトを作成し、プロジェクトのヘッダーに.aを使用することができます。C++ライブラリをdylibにコンパイルし、iOS 9プロジェクトで使用できますか?

iOS 8以降では、Appleがダイナミックリンクをサポートするようになったので、liblzma.aの代わりに私のプロジェクトでliblzma.dylibを使用できるかどうか不思議でした。しかし、私は失敗しました。

は、ここで私がやっていることだ。

  1. は、私が以前にliblzma.aをコンパイルするために使用されるコンパイルスクリプトを変更します。私は--disable-sharedを--enable-sharedに変更し、次にlipoを使って各アーチの.dylibをfat .dylibに結合しました。

  2. 私は私のプロジェクトからliblzma.aを取り出し、そして私のプロジェクト

  3. ビルド、成功にliblzma.dylibを追加しました。デバイス上で実行する場合でも、私は次のエラーが発生しました

dyldの:ライブラリがロードされていません。/Volumes/Data/Developer/build/xz-5.2.2/build/iOS/arm64/lib/liblzma .5.dylib 参照元:/var/containers/Bundle/Application/AB7A063F-9C3F-4CEB-A757-965238947000/****.app/**** 理由:互換性のないライブラリのバージョン:****が必要ですバージョン8.0.0以降、しかしliblzma.5.dylibバージョンが6.0.0 (lldb)

提供 IがCHするツールを使用
  • 新しく建ては.dylibの実際のバージョンをECK、これは私が
  • を得たものである/Volumes/Data/Developer/build/xz-5.2.2/build/iOS/Universal/lib/liblzma.5 .dylib: /Volumes/Data/Developer/build/xz-5.2.2/build/iOS/x86_64/lib/liblzma.5.dylib(互換バージョン8.0.0、現行バージョン8.2.0) /usr/lib

      :/libSystem.dylib(互換性バージョン1.0.0は、現在のバージョン1226年10月1日)

    私はいくつかの質問を持っています

  • このようなdylibを追加できますか?
  • アプリを実行するとliblzma.dylibは実際に自分のiOSデバイスにコピーされますか?
  • なぜエラーメッセージが表示されるliblzma.5.dylibはバージョン6.0.0を提供しますが、otoolは現在のバージョン8.2.0を表示しますか?
  • 私はdylibを使用するiOS 8.0以上のアプリについて、そのdylibも署名する必要があることを知っています。それ、どうやったら出来るの?
  • ありがとう!

    +0

    install_name_tool使用してdylibの名前をインストール、変更する必要がありますか?デバイスに既にライブラリがあるかどうか確認しましたか?おそらくライブラリは適切なディレクトリにコピーされていないので、iPhoneの標準のものが使用されていますか? .aのすべてのインスタンスをプロジェクトから削除しましたか?何が起きているのかを見るためにデバッガで実行しようとすることはできますか? – Igor

    +0

    いくつか検討する必要があります:x64とARMをサポートする汎用アーキテクチャライブラリが必要です。あなたのOSXでコンパイルされ、リンクされているバージョンは 'x86_64'と思われ、あなたが' Universal'として設定しているものと矛盾しているようです。私はそれがどのように行われたのか覚えていませんが、私はそれを行うことができます(私はフレームワークのためにそれをやったことがわかっていますが、手動でクロスコンパイルを設定する必要があります。 'lzma'は正式にサポートされていませんか?あなたのエラーから、そのlldbはライブラリの別のバージョンを持っているようですが、iOSの場合は別のバージョンです。 –

    +0

    @Igorエミュレータで動作しても動作しません。同じエラーです。システムにライブラリがあるかどうかわかりません。はい、私はすべての外観を削除したと思います。私はすでにデバッガで動作しています。そこでエラーメッセージが表示されます。 – Automatic

    答えて

    0

    解決済み!

    • はい、私は
    • liblzma.dylibがコピーされていない場合、iOSのはliblzma.dylibを使用しているようだが、コピーするdylibのためのコピーファイルのビルドフェーズを追加する必要があること
    • ようdylib読み込むことができますすでに
    • 必要とされるよりも低いバージョン番号を持っているデバイス上で私はあなたがエミュレータ上でそれをしようとしている
    関連する問題