CMakeを使用したクロスプラットフォームアプリケーションがあり、プリコンパイル済みのOpenSSLバイナリにリンクしています。しかし、AndroidとiOS独自のOpenSSLにリンクしたいと考えています。デバイスのOpenSSLへのリンク方法を教えてください。または私はすべきですか?
- 私はCMakeでどのようにしますか?
- OSのバージョンに対応していないバイナリを使用しないようにすることを主な目的としています。それは正当な、または典型的な関心事ですか?
CMakeを使用したクロスプラットフォームアプリケーションがあり、プリコンパイル済みのOpenSSLバイナリにリンクしています。しかし、AndroidとiOS独自のOpenSSLにリンクしたいと考えています。デバイスのOpenSSLへのリンク方法を教えてください。または私はすべきですか?
Apple提供のOpenSSLライブラリにリンクしたい場合は、その戦略を考え直すことをお勧めします。 Appleはそのcryptographic services guide(強調鉱山)に次のテキストを持っている:OpenSSLには、一般的に、オープンソースコミュニティで使用されているが
、OpenSSLはバージョンからバージョンへの安定したAPIを提供していません。このため、OS XではOpenSSLライブラリが提供されていますが、OS XのOpenSSLライブラリは廃止されました。およびOpenSSLはiOSの一部として提供されていません。 OS X OpenSSLライブラリをアプリで使用することはお勧めしません。
あなたのアプリがOpenSSLに依存している場合は、OpenSSLを自分でコンパイルして、既知のバージョンのOpenSSLをアプリに静的にリンクする必要があります。このOpenSSLの使用は、OS XとiOSの両方で可能です。ただし、既存のオープンソースプロジェクトとソースの互換性を維持しようとしている場合を除き、通常は別のAPIを使用する必要があります。
また、回答hereとhereも参照してください。したがって、iOSの場合は、とにかく独自のOpenSSLを構築する必要があります。あなたはおそらく、あなたのAndroidビルドのために、一貫性のためにこれをやりたがっていると主張することもできます。
@Tsyvarevがあなたの質問に彼のコメントで言ったように、使用したいOpenSSLでビルドを指すのに適切なヒントを付けてfind_package()
を使用してください。あなたの質問は、あなた自身が既にビルド済みのOpenSSLを使用していることを示しています。おそらく、あなたがどこにあるのかを制御していて、find_package()を使うことは、別のライブラリサフィックスなどを扱う良いプラットフォーム独立方法です。また、パスの依存関係を含むインポートターゲットを提供するので、コードを簡単に使用できます(OpenSSLのヘッダー検索パスを無料で追加するだけです)。詳細については、FindOpenSSL moduleのCMakeドキュメントをお読みください。
iOS上で共通の暗号を試してみるようです。ダーウィンSSLをすでに使用しています。暗号コンポーネントが必要です。 –
「私たちはCMakeでどうやってやるの?」 - リンク用に正しいライブラリを選ぶだけです。 find_package()を使用する場合は、ライブラリの場所についてのヒントを与えてください。 – Tsyvarev
あなたは答えを受け入れましたが、Cmakeを使ってあなたのライブラリのバージョンにリンクすることについての質問への答えを得るために待つべきです。 – jww
***「AndroidとiOS独自のOpenSSLにリンクしたいですね。」*** - OEMがリリース後にソフトウェアを放棄することが多いため、これはよく考えられません。あなた自身の最新のOpenSSLに対してビルドし、あなたのアプリにそれをプッシュするなら、あなたはより良いセキュリティ姿勢をとるでしょう。それで、あなたのアプリは、OEMが何をしているかにかかわらず、常に最新の状態になります。 AppleとCommonCryptoで同じ問題が発生します。アップルもソフトウェアを放棄している。 OpenSSL、libxml2などのライブラリを維持管理することがよくあります。 – jww