Связывание с ключами -R и -rpath в Windows
Я использую компилятор gcc (MinGW) в Windows XP. Я создал библиотеку .dlllibdir.dll
чем я пытался построить программу, которая использует эту библиотеку.
Я не хочу помещать этот файл .dll в папку System или System32, ни указывать путь к нему в переменной PATH, я хочу передать эту информацию самой программе.
Я знаю, что есть-R
а также-rpath
переключатели доступны, поэтому я собирался связать его с одним из них.
Первый путь
gcc -L/ Путь / к / Библиотека-Wl, -rpath,/ Путь / к / Библиотекаmain.o -ldir -o prog
Чем -R:
gcc -L/ Путь / к / Библиотека-Wl, -R,/ Путь / к / Библиотекаmain.o -ldir -o prog
Это ссылки успешно вprog
но при запуске программы Windows выводит сообщение, что не может найтиlibdir.dll
.
Поэтому мой вопрос: что пошло не так, почему путь кlibdir.dll
не известно во время выполнения, даже когда я использую соответствующие ключи?
Допустим, у меня есть prog1 и prog2, каждый из которых содержит свою собственную копию libdir.dll, и оба они начинают выполняться одновременно, загружая код в библиотеку. Что происходит в памяти, если загружаются две копии или компоновщик выясняет, что есть копия и использует это для обеих программ?
Второй вопрос о том, как загружаются библиотеки (любая ОС). Линкеры всегда загружают всю библиотеку или только необходимые части? Например, если функция ссылок на программыfoo()
который находится в библиотеке, компоновщик отображает в памяти только эту функцию или всю библиотеку в первую очередь?