私は、Windows XP で gcc コンパイラ (MinGW) を使用しています。.dll ライブラリを作成しましたlibdir.dll
が、そのライブラリを使用するプログラムをビルドしようとしました。
その .dll ファイルを System または System32 フォルダーに入れたり、PATH 変数にパスを設定したりしたくありません。その情報をプログラム自体に提供したいのです。とスイッチが利用できる
ことはわかっているので、そのうちの 1 つにリンクするつもりでした。-R
-rpath
最初の -rpath:
gcc -L /path/to/lib -Wl,-rpath, /path/to/lib main.o -ldir -o prog-R より:
gcc -L /path/to/lib -Wl,-R, /path/to/lib main.o -ldir -o prog
これは正常にリンクされますprog
が、プログラムを起動すると Windows が見つからないというメッセージを出力しますlibdir.dll
。
私の質問は、何がうまくいかなかったのか、libdir.dll
適切なスイッチを使用している場合でも実行時にパスが不明なのはなぜですか?
libdir.dll の独自のコピーを含む prog1 と prog2 があり、両方がライブラリにコードをロードすると同時に実行を開始するとします。コピーして両方のプログラムに使用しますか?
2 番目の質問は、ライブラリがどのようにロードされるか (任意の OS) に関するものです。リンカは常にライブラリ全体をロードしますか、それとも必要な部分だけをロードしますか?たとえば、プログラムfoo()
がライブラリ内の関数を参照する場合、リンカは最初にその関数またはライブラリ全体のみをメモリにマップしますか?