4

C++ で記述された同じライブラリの複数のバージョンがあります。それらを並べて比較する必要があります。これらのライブラリは、同じ名前空間、関数名を使用し、同じパラメーターを取ります。

同時に 2 つ以上のライブラリをリンクするときに使用するライブラリのバージョンを制御する方法はありますか?

4

1 に答える 1

5

同一のシンボルを持つ 2 つのライブラリをリンクして、両方にアクセスすることはできません。ただし、独自のシン ラッパー ライブラリを構築して、2 つのバージョン管理されたライブラリを明確にすることができます。

  • Wrapper抽象仮想関数を使用して、ターゲット ライブラリの関数を実行する抽象クラスを定義します
  • 仮想メソッドからターゲット ライブラリを呼び出すWrapperクラスでの実装を定義するWrapperImpl
  • Wrapper *MakeImplを返す独立したメソッドを定義するnew WrapperImpl()
  • 静的ライブラリに数回コンパイルWrapperImplし、毎回異なるバージョンのターゲット ライブラリにリンクします。重要:バージョンごとに、、などを使用-DWrapperImpl=WrapperImplV1 -DMakeImpl=MakeImplV1してコンパイラに渡します。複数のライブラリで終わるはずです。V1V2V3
  • メインテスターをこれらの複数のライブラリにリンクします

この時点で、メイン テスターは、プリプロセッサによる名前変更によって作成された独立した関数MakeImplV1MakeImplV2などにアクセスできます。これらの関数を使用して、ターゲット ライブラリのさまざまなバージョンへの呼び出しのインスタンスを取得します。MakeImplV3MakeImplWrapper

于 2012-11-01T15:29:01.683 に答える