libsomething
私のプロジェクトでは、サードパーティからの静的ライブラリ (これから呼び出される) への依存関係があります。最近、libsomething
別のバージョンで利用できるようになりました。私の仕事は、私のソフトウェアに古いバージョンと新しいバージョンのサポートを提供することです。実行時に常に 1 つのバージョンのみlibsomething
が使用されますが、これがどのバージョンであるかは、プログラムの実行間で構成可能である必要があります。
私は WinXP で MSVC2005 を使用しています。二次的な目的は、Linux と GCC に切り替える準備をすることです。
の両方のバージョンがlibsomething
同じシンボルを使用しているため、リンク時に両方のバージョンのシンボルが衝突するため、両方を実行可能ファイルにリンクすることは問題外です。
2 つの実行可能ファイル (1 つは古いバージョンにリンクし、もう 1 つは新しいバージョンを使用) を作成できますが、最終的な展開環境でどの実行可能ファイルを呼び出すかを決定することはできません (従来の理由)。
libsomething
の各バージョンの動的ライブラリ ラッパーを作成し、いくつかの構成ファイルに応じて実行時にそれらをリンクするというアイデアを思いつきました。MSCV では、これは 、 などを使用する道を進むことを意味しますがLoadLibrary()
、GetProcAddress()
Linux では および を使用する必要がdlopen()
ありdlsym()
ます。
libtool
using (ie, libtldl
) が、共有ライブラリを使用するためのこのプラットフォーム依存性をラップしていることを理解しています。これは従うべき適切な道ですか?より良い (または、少なくとも異なる) 方法はありますか? の代替はlibtldl
オープンソースとして存在しますか?