2016-10-03 20 views
1

コンパイルOpenSSLの

  • 環境:LinuxのOS、(私の場合使用12bは

アンドロイド5.xのオンの場合:私は、Mac OS)

  • のAndroid NDKを使用

    System.loadLibrary("crypto"); 
    System.loadLibrary("ssl"); 
    

    同じ名前のネイティブOSのlibと競合します。そして不運にも、手動で名前を変更すると動作しませんでした。 libcryptox.soやlibsslx.soのような別の名前にコンパイルしたいのですが

    私は一日中でもMakefile.orgを試してみたいと思います。だから誰かに教えてください。

  • +1

    ライブラリの名前を変更するだけではうまくいかない理由は、共有ライブラリには、 'SONAME'という名前のELFヘッダーに少しのメタデータが含まれているからです。 Android(少なくとも新しいバージョンでは、これがGBまで真実であるかどうかわかりません)、これは 'loadLibrary'に使用してください。 –

    +1

    ラッパー共有オブジェクトを記述する必要があります。ラッパー共有オブジェクトは、必要な機能をエクスポートします。 ZoogoteによってロードされたOpenSSLの下位バージョンを取得しないように、OpenSSLにも静的にリンクしています。 [OpenSSLをバージョン管理されていない共有ライブラリとして構築する方法](http://stackoverflow.com/a/24212330/608639)と[HttpClient用のAndroidアプリケーションでOpenSSLライブラリを変更する方法](http://stackoverflow.com/a/28392326)も参照してください。/608639)。 – jww

    +0

    OpenSSL wikiの[OpenSSL and Android](https://wiki.openssl.org/index.php/Android)も参照してください。 Androidドキュメントの[SSLエクスプロイトから保護するためのセキュリティプロバイダの更新](http://developer.android.com/training/articles/security-gms-provider.html)を参照してください。 – jww

    答えて

    1

    システムがランタイム環境にロードされたLIBSを持って、あなたはそれらのLIBSのネイティブDLOADを使用します小さなNDKコードを作ることができSystem.loadLibraryを

    を使用することはできません。 そして最終的には、次のバージョンで何をするのかわからないので、一般的なアンドロイドAPIを通してssl apiを使用するのが最善だと思います。

    関連する問題