C++ で記述された同じライブラリの複数のバージョンがあります。それらを並べて比較する必要があります。これらのライブラリは、同じ名前空間、関数名を使用し、同じパラメーターを取ります。
同時に 2 つ以上のライブラリをリンクするときに使用するライブラリのバージョンを制御する方法はありますか?
C++ で記述された同じライブラリの複数のバージョンがあります。それらを並べて比較する必要があります。これらのライブラリは、同じ名前空間、関数名を使用し、同じパラメーターを取ります。
同時に 2 つ以上のライブラリをリンクするときに使用するライブラリのバージョンを制御する方法はありますか?
同一のシンボルを持つ 2 つのライブラリをリンクして、両方にアクセスすることはできません。ただし、独自のシン ラッパー ライブラリを構築して、2 つのバージョン管理されたライブラリを明確にすることができます。
Wrapper
抽象仮想関数を使用して、ターゲット ライブラリの関数を実行する抽象クラスを定義しますWrapper
クラスでの実装を定義するWrapperImpl
Wrapper *MakeImpl
を返す独立したメソッドを定義するnew WrapperImpl()
WrapperImpl
し、毎回異なるバージョンのターゲット ライブラリにリンクします。重要:バージョンごとに、、などを使用-DWrapperImpl=WrapperImplV1 -DMakeImpl=MakeImplV1
してコンパイラに渡します。複数のライブラリで終わるはずです。V1
V2
V3
この時点で、メイン テスターは、プリプロセッサによる名前変更によって作成された独立した関数MakeImplV1
、MakeImplV2
などにアクセスできます。これらの関数を使用して、ターゲット ライブラリのさまざまなバージョンへの呼び出しのインスタンスを取得します。MakeImplV3
MakeImpl
Wrapper