2016-09-21 3 views
0

サードパーティのベンダーが私に事前構築されたセキュリティライブラリをリリースしており、そのコードやメークファイルにアクセスできません。このライブラリはopenssl & protobufの特定のバージョンに対してコンパイルされています。問題は、私が働いているアプリで、クロムは、これらの2つのライブラリの修正バージョンも使用しています(技術的には、boringslはopensslではありませんが、シンボルを共有しています)。彼らはクロム源とコンパイルされ、静的にリンクされています。セキュリティライブラリをchromiumに追加すると、異なるヘッダーに対してコンパイルされたライブラリとオブジェクトの2つの競合するバージョンが作成されます。これはもちろん、実行時のクラッシュや予期しない結果につながります。すべてが正しくリンクされていて、シンボルが衝突しないように私ができることはありますか?ライブラリの2つの競合するバージョンをリンクする

+1

私はセキュリティベンダーに、opensslとprotobufに静的にリンクされたライブラリを提供し、APIのシンボルだけがコンシューマに公開されるようにビルドすることを検討することも考えています。そうでなければ、それはお尻の完全な痛みになります。 – Petesh

答えて

0

すべてが正しくリンクされ、シンボルが衝突しないようにするためにできることはありますか?

あなたの唯一の本当の選択肢は次のとおりです。サードパーティのライブラリ

    1. 使用dlopen(..., RTLD_LOCAL);はあなたにクロムツリーに対して構築されたバージョンを提供するベンダーに確認して下さい。
    2. このサードパーティ製のライブラリの使用を中止してください。
    3. OpenSSLとprotobufを第三者のライブラリに静的にリンクし、そのシンボルを隠すソリューションは、別の可能性のようですが、ライセンスの影響があります。 protobufとopensslの両方がバイナリの再配布を許可しているようですので、これは実際には動作しますが、IANALです。
  • 関連する問題