49

Linux/GCC では、-rpath フラグを使用して、環境変数を調整することなく、共有ライブラリの実行可能ファイルの検索パスを変更できます。

これは Windows でも実現できますか? 私の知る限り、dll は常に実行可能ファイルのディレクトリと PATH で検索されます。

私のシナリオ: 一意の名前を気にせずに、プロパティ (32/64 ビット/デバッグ/リリース) に従って共有ライブラリを場所に配置したいと考えています。Linux では、これは rpath 経由で簡単に実行できますが、Windows でこれを行う方法はまだ見つかりません。

ヒントをありがとう!

4

3 に答える 3

24

残念ながら、RPATH に直接対応するものはありません。いくつかの代替可能性があり、それぞれが独自の特別な方法であなたにとって望ましくない可能性が最も高い.

ランタイム ライブラリの衝突を回避するためにビルド フレーバーごとに異なる exe が必要な場合、最も簡単な方法は、各 exe を DLL の各セットと同じフォルダーに配置することです。

また、言及したように、最も一般的な方法は、バッチ ファイルを使用して PATH 変数を変更し、exe をブートストラップすることです。

プログラムを実行する前に、現在の作業ディレクトリを目的の DLL フォルダに変更することもできます。

関数SetDllDirectoryまたはAddDllDirectoryを exe 内で使用できます。これはおそらく RPATH に最も近いものですが、WinXP SP1 以降でのみ機能します。

各 exe フレーバーのファイル名を変更する場合は、"App Paths" レジストリ キーを使用できます。各exeには一意のファイル名が必要です。

于 2008-10-23T16:31:56.757 に答える
6

Windows での DLL の検索順序は、MSDNのこのページで説明されています。実行時の動的リンクを使用している場合は、 を呼び出すときにフォルダーを指定できますLoadLibrary

于 2008-09-20T11:03:01.990 に答える
5

「分離されたアプリケーション」は、DLLの依存関係を記述するXMLマニフェストを埋め込むためのメカニズムです。

于 2008-09-20T14:34:35.307 に答える